diff --git a/src/tse/lr5/CsvReader.java b/src/tse/lr5/CsvReader.java new file mode 100644 index 0000000..721cfd4 --- /dev/null +++ b/src/tse/lr5/CsvReader.java @@ -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 + */ +public class CsvReader { + + public interface ReaderHandler { + + 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 readCsv() throws IOException { + return readCsv(true); + } + + public List readCsv(boolean skipHeaderLine) throws IOException { + return readCsv(skipHeaderLine, ","); + } + + public List 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 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; + } + + +}