我刚开始使用NIO包处理文件,对Java 8不太熟悉。我需要帮助处理大文件,每个文件的行数在100,000到1,000,000之间,将每一行转换为特定格式并将格式化后的行写入新文件。生成的新文件每个最多只能包含100,000行。所以:
但是,当我通过
- 如果我有一个500,000行的文件需要处理,则必须将这些行转换并分布到5个新文件中。
- 如果我有一个745,000行的文件需要处理,则必须将这些行转换并打印到8个新文件中。
我很难想出一个能有效利用Java 8新功能的方法。我已经确定了基于大文件行数生成的新文件数量,并创建了这些新的空文件:
Path largFile = Path.get("path\to\file");
long recordCount = Files.lines(file).count();
int maxRecordOfNewFiles = 100000;
int numberOfNewFiles = 1;
if (recordCount > maxRecordOfNewFiles) {
numberOfNewFiles = Math.toIntExact(recordCount / maxRecordOfNewFiles);
if (Math.toIntExact(recordCount % maxRecordOfNewFiles) > 0) {
numberOfNewFiles ++;
}
}
IntStream.rangeClosed(1, numberOfNewFiles).forEach((i)
-> {
try {
Path newFile = Paths.get("path\to\newFiles\newFile1.txt");
Files.createFile(cdpFile);
} catch (IOException iOex) {
}
});
但是,当我通过
Files.lines(largeFile).forEach(())
来遍历largeFile
的行时,我不知道如何格式化前10万行,并确定新文件的第一行并将其打印在该文件上,然后将第二批10万行写入第二个新文件,以此类推。
任何帮助都将不胜感激。 :)
List<String>
来存储格式化后的数据(虽然我不太清楚你的意思)。当达到100k或文件结尾时,创建part文件,保存包含在ArrayList<String>
中的数据,并继续处理下一批行。这里的问题是,你已经尝试过什么了? - kazbeel