我希望将包含字符串的大文件合并为一个文件,并尝试使用nio2。我不想将整个文件加载到内存中,所以我尝试使用BufferedReader:
public void mergeFiles(filesToBeMerged) throws IOException{
Path mergedFile = Paths.get("mergedFile");
Files.createFile(mergedFile);
List<Path> _filesToBeMerged = filesToBeMerged;
try (BufferedWriter writer = Files.newBufferedWriter(mergedFile,StandardOpenOption.APPEND)) {
for (Path file : _filesToBeMerged) {
// this does not work as write()-method does not accept a BufferedReader
writer.append(Files.newBufferedReader(file));
}
} catch (IOException e) {
System.err.println(e);
}
}
我用这个尝试了一下,它可以工作,但是字符串的格式(例如换行符等)没有复制到合并后的文件中:
...
try (BufferedWriter writer = Files.newBufferedWriter(mergedFile,StandardOpenOption.APPEND)) {
for (Path file : _filesToBeMerged) {
// writer.write(Files.newBufferedReader(file));
String line = null;
BufferedReader reader = Files.newBufferedReader(file);
while ((line = reader.readLine()) != null) {
writer.append(line);
writer.append(System.lineSeparator());
}
reader.close();
}
} catch (IOException e) {
System.err.println(e);
}
...
如何在不将整个文件加载到内存中的情况下,使用NIO2合并大型文件?
FileChannel.transferTo
的作用时,你会意识到如何实现分割的解决方案(即:非常相似)。如果你在实现过程中遇到困难,可以开一个新问题。 - Holger