Próbuję przeczytać duże pliki CSV
i TSV
(Tab sepperated) z około 1000000
wierszami lub więcej. Teraz próbowałem odczytać linie TSV
zawierające ~2500000
z , ale rzuca mi java.lang.NullPointerException
. Działa z mniejszymi plikami TSV
z liniami ~250000
. Tak więc zastanawiałem się, czy są jakieś inne Libraries
, które obsługują odczyt dużych plików CSV
i TSV
. Czy masz jakies pomysły?Dobry i skuteczny czytnik CSV/TSV dla języka Java
Każdy kto jest zainteresowany w moim kodu (I skrócić go, więc Try-Catch
jest oczywiście nieważny):
InputStreamReader in = null;
CSVReader reader = null;
try {
in = this.replaceBackSlashes();
reader = new CSVReader(in, this.seperator, '\"', this.offset);
ret = reader.readAll();
} finally {
try {
reader.close();
}
}
Edit: Jest to metoda, gdzie skonstruować InputStreamReader
:
private InputStreamReader replaceBackSlashes() throws Exception {
FileInputStream fis = null;
Scanner in = null;
try {
fis = new FileInputStream(this.csvFile);
in = new Scanner(fis, this.encoding);
ByteArrayOutputStream out = new ByteArrayOutputStream();
while (in.hasNext()) {
String nextLine = in.nextLine().replace("\\", "/");
// nextLine = nextLine.replaceAll(" ", "");
nextLine = nextLine.replaceAll("'", "");
out.write(nextLine.getBytes());
out.write("\n".getBytes());
}
return new InputStreamReader(new ByteArrayInputStream(out.toByteArray()));
} catch (Exception e) {
in.close();
fis.close();
this.logger.error("Problem at replaceBackSlashes", e);
}
throw new Exception();
}
Dlaczego nie czytasz tego samemu dzięki BufferedReader? –
Właściwie chciałem mieć ładnie wykonane, często używane kodowanie i nie chcę wymyślać koła, właśnie dlatego wszyscy używają bibliotek, o których myślę. Ale jeśli nic nie działa, zrobię to. – Robin
z tymi wieloma wierszami zajrzałbym do przetwarzania pliku w partiach: Czytaj n linii z pliku, przetwarzaj z csv, przeczytaj następną partię itp. – opi