Добавлен CsvReader с возможностью реагирования на события чтения
This commit is contained in:
parent
07e86bfb22
commit
8c43177069
76
src/tse/lr5/CsvReader.java
Normal file
76
src/tse/lr5/CsvReader.java
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package tse.lr5;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Чтение CSV файла.
|
||||||
|
* @author aNNiMON
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
public class CsvReader<T> {
|
||||||
|
|
||||||
|
public interface ReaderHandler<T> {
|
||||||
|
|
||||||
|
void onStartRead(File file);
|
||||||
|
|
||||||
|
T createObject(String[] params);
|
||||||
|
|
||||||
|
void onFinishRead();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final File file;
|
||||||
|
private ReaderHandler handler;
|
||||||
|
|
||||||
|
public CsvReader(File file) {
|
||||||
|
this.file = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReaderHandler(ReaderHandler handler) {
|
||||||
|
this.handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> readCsv() throws IOException {
|
||||||
|
return readCsv(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> readCsv(boolean skipHeaderLine) throws IOException {
|
||||||
|
return readCsv(skipHeaderLine, ",");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<T> readCsv(boolean skipHeaderLine, String separator) throws IOException {
|
||||||
|
if (handler == null) throw new RuntimeException("Не установлен ReaderHandler");
|
||||||
|
|
||||||
|
handler.onStartRead(file);
|
||||||
|
BufferedReader reader = new BufferedReader(
|
||||||
|
new InputStreamReader( new FileInputStream(file), "UTF-8" )
|
||||||
|
);
|
||||||
|
if (skipHeaderLine) {
|
||||||
|
reader.readLine();
|
||||||
|
}
|
||||||
|
String line;
|
||||||
|
List<T> list = new ArrayList<>();
|
||||||
|
while ( (line = reader.readLine()) != null ) {
|
||||||
|
T obj = null;
|
||||||
|
try {
|
||||||
|
if (!line.isEmpty()) {
|
||||||
|
String[] params = line.split(separator);
|
||||||
|
obj = (T) handler.createObject(params);
|
||||||
|
}
|
||||||
|
} catch (RuntimeException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
if (obj != null) list.add(obj);
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
handler.onFinishRead();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user