public static CsvReader getCsvReader(Reader reader) { CsvReader csvReader = new CsvReader(reader); csvReader.setEscapeMode(CsvReader.ESCAPE_MODE_BACKSLASH); csvReader.setSafetySwitch(false); csvReader.setCaptureRawRecord(false); return csvReader; }
/** * Closes and releases all related resources. */ public void close() { if (!closed) { close(true); closed = true; } }
/** * Skips the next record of data by parsing each column. Does not * increment * {@link org.jumpmind.symmetric.csv.CsvReader#getCurrentRecord getCurrentRecord()}. * * @return Whether another record was successfully skipped or not. * @exception IOException * Thrown if an error occurs while reading data from the * source stream. */ public boolean skipRecord() throws IOException { checkClosed(); boolean recordRead = false; if (hasMoreData) { recordRead = readRecord(); if (recordRead) { currentRecord--; } } return recordRead; }
/** * Returns the current column value for a given column header name. * * @param headerName * The header name of the column. * @return The current column value. * @exception IOException * Thrown if this object has already been closed. */ public String get(String headerName) throws IOException { checkClosed(); return get(getIndex(headerName)); }
checkClosed(); checkDataLength(); } else { startedWithQualifier = false; checkDataLength(); } else { endColumn(); } else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF)) || (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) { endColumn(); endRecord(); case ComplexEscape.UNICODE: escapeValue *= (char) 16; escapeValue += hexToDec(currentLetter); case ComplexEscape.HEX: escapeValue *= (char) 16; escapeValue += hexToDec(currentLetter); appendLetter(escapeValue); } else { dataBuffer.ColumnStart = dataBuffer.Position + 1; lastLetterWasQualifier = false;
updateCurrentValue(); - dataBuffer.LineStart, newLength(rawBuffer.Buffer.length)); dataBuffer.Count = inputStream.read(dataBuffer.Buffer, 0, dataBuffer.Buffer.length); } catch (IOException ex) { close();
public static String[] tokenizeCsvData(String csvData) { String[] tokens = null; if (csvData != null) { CsvReader csvReader = getCsvReader(new StringReader(csvData)); try { if (csvReader.readRecord()) { tokens = csvReader.getValues(); } } catch (IOException e) { } } return tokens; }
/** * Read the first record of data as column headers. * * @return Whether the header record was successfully read or not. * @exception IOException * Thrown if an error occurs while reading data from the * source stream. */ public boolean readHeaders() throws IOException { boolean result = readRecord(); // copy the header data from the column array // to the header string array headersHolder.Length = columnsCount; headersHolder.Headers = new String[columnsCount]; for (int i = 0; i < headersHolder.Length; i++) { String columnValue = get(i); headersHolder.Headers[i] = columnValue; // if there are duplicate header names, we will save the last one headersHolder.IndexByName.put(columnValue, new Integer(i)); } if (result) { currentRecord--; } columnsCount = 0; return result; }
checkClosed(); checkDataLength(); } else { skippedLine = true;
/** * Creates a {@link org.jumpmind.symmetric.csv.CsvReader CsvReader} object using a string * of data as the source. Uses ISO-8859-1 as the * {@link java.nio.charset.Charset Charset}. * * @param data * The String of data to use as the source. * @return A {@link org.jumpmind.symmetric.csv.CsvReader CsvReader} object using the * String of data as the source. */ public static CsvReader parse(String data) { if (data == null) { throw new IllegalArgumentException("Parameter data can not be null."); } return new CsvReader(new StringReader(data)); }
public boolean isQualified(int columnIndex) throws IOException { checkClosed(); if (columnIndex < columnsCount && columnIndex > -1) { return isQualified[columnIndex]; } else { return false; } }
private void updateCurrentValue() { if (startedColumn && dataBuffer.ColumnStart < dataBuffer.Position) { expandColumnBuffer(); System.arraycopy(dataBuffer.Buffer, dataBuffer.ColumnStart, columnBuffer.Buffer, columnBuffer.Position, dataBuffer.Position - dataBuffer.ColumnStart); columnBuffer.Position += dataBuffer.Position - dataBuffer.ColumnStart; } dataBuffer.ColumnStart = dataBuffer.Position + 1; }
updateCurrentValue(); close(); int newLength = newLength(values.length);
@Override protected CsvData readNext() { try { if (csvReader.readRecord()) { String[] tokens = csvReader.getValues(); return buildCsvData(tokens, DataEventType.INSERT); } else { return null; } } catch (IOException ex) { throw new IoException(ex); } }
/** * Returns the current column value for a given column index. * * @param columnIndex * The index of the column. * @return The current column value. * @exception IOException * Thrown if this object has already been closed. */ public String get(int columnIndex) throws IOException { checkClosed(); if (columnIndex > -1 && columnIndex < columnsCount) { return values[columnIndex]; } else { return ""; } }
long bytesRead = 0; Table table = null; while (tokens != null || csvReader.readRecord()) { lineNumber++; context.put(CTX_LINE_NUMBER, lineNumber); if (tokens == null) { tokens = csvReader.getValues();
@Override protected void finish() { if (csvReader != null) { csvReader.close(); } }
/** * Returns the column header value for a given column index. * * @param columnIndex * The index of the header column being requested. * @return The value of the column header at the given column index. * @exception IOException * Thrown if this object has already been closed. */ public String getHeader(int columnIndex) throws IOException { checkClosed(); // check to see if we have read the header record yet // check to see if the column index is within the bounds // of our header array if (columnIndex > -1 && columnIndex < headersHolder.Length) { // return the processed header data for this column return headersHolder.Headers[columnIndex]; } else { return ""; } }
@Override protected void finalize() { close(false); }
public String[] getValues() throws IOException { checkClosed(); // need to return a clone, and can't use clone because values.Length // might be greater than columnsCount String[] clone = new String[columnsCount]; System.arraycopy(values, 0, clone, 0, columnsCount); return clone; }