Я хочу объединить огромные файлы, содержащие строки, в один файл и попытался использовать 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 без загрузки всего файла в память?
Вау, это решение действительно здорово - и исходный код настолько короток. Благодаря! Знаете ли вы решение на основе nio2 для SPLITTING A LARGE FILE в набор меньших файлов? На самом деле, я использую что-то вроде этого: http://todayguesswhat.blogspot.de/2014/05/java-split-large-file-sample-code-high.html. – nimo23
@ nimo23: ну, я думаю, когда вы пытаетесь понять код моего ответа, особенно то, что ['FileChannel.transferTo'] (http://docs.oracle.com/javase/7/docs/api/java/ nio/channels/FileChannel.html # transferTo (long,% 20long,% 20java.nio.channels.WritableByteChannel)), вы поймете, как может выглядеть решение для расщепления (читайте: очень похоже). Если у вас есть трудности с его внедрением, вы можете открыть новый вопрос. – Holger
Хорошо, я попробую его самостоятельно и предоставит вам решение! – nimo23