Tôi đang cố gắng đọc các tệp lớn CSV
và TSV
(Tab sepperated) với khoảng 1000000
hàng trở lên. Bây giờ tôi đã cố gắng đọc một số TSV
chứa ~2500000
dòng với opencsv
, nhưng nó ném cho tôi một java.lang.NullPointerException
. Nó hoạt động với các tệp TSV
nhỏ hơn với các dòng ~250000
. Vì vậy, tôi đã tự hỏi nếu có bất kỳ Libraries
khác hỗ trợ việc đọc các tệp CSV
và TSV
lớn. Bạn có bất cứ ý tưởng?Đầu đọc CSV/TSV hiệu quả và tốt cho Java
Mọi người ai quan tâm đến Mã của tôi (tôi rút ngắn nó, vì vậy Try-Catch
rõ ràng là không hợp lệ):
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();
}
}
Chỉnh sửa: Đây là phương pháp mà tôi xây dựng 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();
}
Tại sao bạn không tự đọc nó nhờ một BufferedReader? –
Thực sự tôi muốn có được chế tác độc đáo, Mã được sử dụng phổ biến và tôi không muốn phát minh lại bánh xe, thực ra đó là lý do mọi người sử dụng libs tôi nghĩ. Nhưng nếu không có gì làm việc, tôi sẽ làm như vậy. – Robin
với nhiều hàng tôi sẽ xem xét xử lý tệp theo lô: Đọc n dòng từ tệp, xử lý bằng csv, đọc hàng loạt tiếp theo, v.v. – opi