我有一个巨大的文本文件(207 MB,400万行),我需要逐行读取它。
每一行都有这种格式:
20227993821NAME AND SURNAME NINIC NN08
我正在使用(对于常规文件)Java库的FileReader
和BufferedReader
,如下所示:
FileReader dataFile = new FileReader(directory);
data = new BufferedReader(dataFile);
String s;
while((s = data.readLine()) != null){
//do stuff
}
没有任何问题,但是使用大文件需要花费太多时间来处理
我想知道在这种情况下最好的做法是什么(另一个图书馆,不同的方法等),任何事情都会有所帮助
该文件由政府机构定期发布,必须加载到我的软件中进行数据比较。
编辑:
此代码:
BufferedReader data = new BufferedReader(new FileReader(file));
String s;
int count = 0;
while ((s = data.readLine()) != null) {
System.out.println (count + " - " + s);
count++;
}
data.close();
在19分30秒内完成。我不知道为什么花这么长时间。我有一个64位操作系统和一个i5处理器。
答案 0 :(得分:7)
如果我跑
File file = new File("/tmp/deleteme.txt");
file.deleteOnExit();
long start = System.nanoTime();
PrintWriter pw = new PrintWriter(file);
for (int i = 0; i < 4 * 1000 * 1000; i++)
pw.println("01234567890123456789012345678901234567890123456789");
pw.close();
long mid = System.nanoTime();
BufferedReader data = new BufferedReader(new FileReader(file));
String s;
while ((s = data.readLine()) != null) {
//do stuff
}
data.close();
long end = System.nanoTime();
System.out.printf("Took %.3f seconds to write and %.3f seconds to read a %.2f MB file.%n",
(mid - start) / 1e9, (end - mid) / 1e9, file.length() / 1e6);
打印
Took 0.465 seconds to write and 0.522 seconds to read a 204.00 MB file.
编辑:如果我打印出每一行,它会大大减慢,因为写入屏幕需要很长时间。我发现MS-DOS窗口特别慢。
Took 0.467 seconds to write and 10.254 second to read a 204.00 MB file.
我不相信它的文件读取时间太长,这是你用它做的事情需要很长时间。