我正在尝试读取大型的CSV
和TSV
(以制表符分隔)文件,其中包含大约1000000
行或更多。现在我尝试使用opencsv
读取一个包含~2500000
行的TSV
文件,但它抛出了一个java.lang.NullPointerException
异常。它可以处理较小的TSV
文件,其中包含~250000
行。所以我想知道是否有其他库
支持读取巨大的CSV
和TSV
文件。你有什么想法吗?
对于所有对我的代码感兴趣的人(我缩短了它,因此Try-Catch
显然无效):
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();
}
}
编辑:这是我构建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();
}