org.sfm.csv.CsvParser Maven / Gradle / Ivy
package org.sfm.csv;
import java.io.IOException;
import java.io.Reader;
import java.util.Iterator;
//IFJAVA8_START
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
//IFJAVA8_END
import org.sfm.csv.parser.CellConsumer;
import org.sfm.csv.parser.CsvReader;
import org.sfm.csv.parser.CsvStringArrayIterator;
import org.sfm.csv.parser.StringArrayConsumer;
import org.sfm.utils.RowHandler;
public final class CsvParser {
public final static CellConsumer DUMMY_CONSUMER = new CellConsumer() {
@Override
public void newCell(char[] chars, int offset, int length) {
}
@Override
public void endOfRow() {
}
@Override
public void end() {
}
};
public static int _8K = 1 << 13;
public static final int DEFAULT = _8K;
@Deprecated
public CsvParser(){
}
public static CC parse(int bufferSize, Reader r, CC cellConsumer) throws IOException {
newCsvReader(bufferSize, r).parseAll(cellConsumer);
return cellConsumer;
}
public static CC parse(final Reader r, final CC cellConsumer) throws IOException {
newCsvReader(r).parseAll(cellConsumer);
return cellConsumer;
}
public static CC parse(final Reader r, final CC cellConsumer, int skip) throws IOException {
CsvReader reader = newCsvReader(r);
reader.skipLines(skip);
reader.parseAll(cellConsumer);
return cellConsumer;
}
public static CC parse(final Reader r, final CC cellConsumer, int skip, int limit) throws IOException {
CsvReader reader = newCsvReader(r);
reader.skipLines(skip);
reader.parseLines(cellConsumer, limit);
return cellConsumer;
}
public static > RH readRows(final Reader r, final RH handler) throws IOException {
parse(r, new StringArrayConsumer(handler));
return handler;
}
public static > RH readRows(final Reader r, final RH handler, int skip) throws IOException {
parse(r, new StringArrayConsumer(handler), skip);
return handler;
}
public static > RH readRows(final Reader r, final RH handler, int skip, int limit) throws IOException {
parse(r, new StringArrayConsumer(handler), skip, limit);
return handler;
}
public static Iterator iterateRows(Reader r) {
return new CsvStringArrayIterator(newCsvReader(r));
}
public static Iterator iterateRows(Reader r, int skip) throws IOException {
CsvReader csvReader = newCsvReader(r);
csvReader.skipLines(skip);
return new CsvStringArrayIterator(csvReader);
}
//IFJAVA8_START
public static Stream stream(Reader r) {
CsvReader csvReader = newCsvReader(r);
Spliterator spliterator = new CsvStringArraySpliterator(csvReader);
return StreamSupport.stream(spliterator, false);
}
public static Stream stream(Reader r, int skip) throws IOException {
CsvReader csvReader = newCsvReader(r);
csvReader.skipLines(skip);
Spliterator spliterator = new CsvStringArraySpliterator(csvReader);
return StreamSupport.stream(spliterator, false);
}
private static class CsvStringArraySpliterator implements Spliterator {
private final CsvReader reader;
public CsvStringArraySpliterator(CsvReader csvReader) {
this.reader = csvReader;
}
@Override
public boolean tryAdvance(Consumer super String[]> action) {
try {
return reader.parseLine(new StringArrayConsumer>((strings) -> action.accept(strings)));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void forEachRemaining(Consumer super String[]> action) {
try {
reader.parseAll(new StringArrayConsumer>((strings) -> action.accept(strings)));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public Spliterator trySplit() {
return null;
}
@Override
public long estimateSize() {
return Long.MAX_VALUE;
}
@Override
public int characteristics() {
return Spliterator.ORDERED | Spliterator.NONNULL;
}
}
//IFJAVA8_END
public static CsvReader newCsvReader(Reader reader) {
return newCsvReader(DEFAULT, reader);
}
public static CsvReader newCsvReader(int bufferSize, Reader reader) {
return new CsvReader(bufferSize, reader);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy