Revision 47652 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/csv/simplereaders/CSVReaderSuperCSV.java

View differences:

CSVReaderSuperCSV.java
2 2

  
3 3
import java.io.BufferedReader;
4 4
import java.io.File;
5
import java.io.FileInputStream;
6
import java.io.FileNotFoundException;
7
import java.io.FileReader;
5 8
import java.io.IOException;
9
import java.io.InputStreamReader;
6 10
import java.io.Reader;
11
import java.io.UnsupportedEncodingException;
7 12
import java.util.List;
8 13
import java.util.function.Function;
9 14
import org.apache.commons.io.FilenameUtils;
15
import org.apache.commons.io.IOUtils;
10 16
import org.apache.commons.io.input.CloseShieldReader;
11 17
import org.apache.commons.lang3.StringUtils;
12 18
import org.apache.commons.text.StringEscapeUtils;
......
72 78
        }
73 79
        return this.columns;
74 80
    }
81
    
82
    private boolean hasMultilineRecords(SimpleTaskStatus status) throws FileNotFoundException, UnsupportedEncodingException, IOException {
83
        FileInputStream fis = null;
84
        InputStreamReader theReader = null;
85
        BufferedReader breader = null;
86
        try {
87
            CSVStoreParameters params = getParameters();
88
            File data_file = CSVStoreParameters.getFile(params);
89
            String charset = CSVStoreParameters.getCharset(params);
90
            fis = new FileInputStream(data_file);
91
            theReader = new InputStreamReader(fis, charset);
92
            breader = new BufferedReader(theReader);
93
            CsvListReader parser = new CsvListReader(breader, getCSVPreferences());
94
//        int firstRecordLine = 0;
95
            while (parser.read() != null) {
96
                if (parser.getLineNumber() != parser.getRowNumber()) {
97
                    return true;
98
                }
99
            }
100
            return false;
101
        } finally {
102
            IOUtils.closeQuietly(breader);
103
            IOUtils.closeQuietly(theReader);
104
            IOUtils.closeQuietly(fis);
105
        }
106
    }
75 107

  
76 108
    @Override
77 109
    public GetItemWithSize64<List<String>>  getVirtualRows(SimpleTaskStatus status) {
......
83 115
            if( data_file.length()< 10*1024*1024 ) {
84 116
                return null;
85 117
            }
86
            
87
            Function<BufferedReader, Integer> numberOfLinesInRecord = new Function<BufferedReader, Integer>() {
88
                @Override
89
                public Integer apply(BufferedReader breader) {
90
                    CloseShieldReader theReader = CloseShieldReader.wrap(breader);
91
                    CsvListReader parser = new CsvListReader(theReader, getCSVPreferences());
92
                    try {
93
                        List<String> values = parser.read();
94
                    } catch (IOException ex) {
95
                        return 1;
118
            Function<BufferedReader, Integer> numberOfLinesInRecord = null;
119
            if(this.hasMultilineRecords(status)){
120
                numberOfLinesInRecord = new Function<BufferedReader, Integer>() {
121
                    @Override
122
                    public Integer apply(BufferedReader breader) {
123
                        CloseShieldReader theReader = CloseShieldReader.wrap(breader);
124
                        CsvListReader parser = new CsvListReader(theReader, getCSVPreferences());
125
                        try {
126
                            List<String> values = parser.read();
127
                        } catch (IOException ex) {
128
                            return 1;
129
                        }
130
                        return parser.getLineNumber();
96 131
                    }
97
                    return parser.getLineNumber();
98
                }
99
            };
132
                };
133
            }
100 134

  
101 135
            String charset = CSVStoreParameters.getCharset(params);
102 136
            File index_file = getIndexFile(data_file);

Also available in: Unified diff