The library intended to read or process content from files with different formats (like csv, txt, xls, xlsx) via one general interface.
compile('com.github.boggard:universal-reader:2.0.1')
<dependency>
<groupId>com.github.boggard</groupId>
<artifactId>universal-reader</artifactId>
<version>2.0.0</version>
</dependency>
To process file with data you need to call static method
UniversalReader.processRecords(FileSource fileSource, ContentHandler<R> contentsHandler, ReaderConfiguration configuration)
About each parameter below.
Interface for wrapping the to be processed.
Example for java.io.File:
public class SystemFileSource implements FileSource {
private final File file;
public SystemFileSource(File file) {
this.file = file;
}
@Override
public String getFileName() {
return file.getName();
}
@Override
public InputStream getInputStream() throws IOException {
return new FileInputStream(file);
}
}
To handle content of file you need to implements interface ContentHandler which contains events of reading process. Simple example of implementation to read list of records from file:
ContentHandler<Integer> contentHandler = new ContentHandler<Integer>() {
private int recordsCount = 0;
private String[] currentRecord;
@Override
public void startRecord() {
currentRecord = new String[2];
}
@Override
public void startField(int index, String field) {
switch(index) {
case 0: //first field of record
currentRecord[0] = field;
break;
case 1: //second field of record
currentRecord[1] = field;
break;
}
}
@Override
public void endRecord() {
//do something with record, save for example
save(currentRecord);
recordsCount++;
}
@Override
public Integer getResult() {
return recordsCount;
}
};
As you see the interface is a generic and you can specify the result type you want.
Class for content reading utility configurations like records or fields separator symbol.
You can use factory constructors
- to create default configuration:
ReaderConfiguration.defaultReaderConfiguration();
- to create default configuration for files with header (start line index = 1 instead of 0):
ReaderConfiguration.withHeaderDefaultConfiguration();
- to create custom configuration:
ReaderConfiguration.customConfiguration("\n", "\t", 2);