我有两个巨大的文件,我需要合并到另一个文件。目前,我正在使用Apache Commons VFS连接到sftp服务器并合并它们。我使用下面的逻辑合并文件
for(String file: filesToMerge){
try( FileObject fileObject= utility.getFileObject();
OutputStream fileOutputStream= fileObject.resolveFile(pathToExport+"file3.txt").getContent().getOutputStream(true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "ISO-8859-1");
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter)
) {
String content= fileObject.resolveFile(pathToExport+file).getContent().getString("ISO-8859-1");
bufferedWriter.write(content);
log.info("process completed");
} catch (Exception e) {
log.error("Error while mergingfiles. The error is: " + e);
} finally {
log.info("closing FTP session ");
}
}这些文件很大,我的内存也很有限。是否有任何有效的方法来更快地合并文件,而不是将整个内容作为字符串?使用像apache-commons-io这样的第三方库而不是BufferedWriter可以提高性能吗?
发布于 2022-10-10 17:21:30
是的,正确的方法是在FileContent文档页面的顶部编写:
若要从文件中读取,请使用由InputStream ()返回的getInputStream()。
所以,用以下方法替换你拥有的:
fileObject.resolveFile(pathToExport+file).getContent()
.getInputStream()
.transferTo(fileOutputStream);请注意,您的代码目前并不合并这些文件,而是用每个新文件覆盖file3.txt。您可能应该附加到输出流,而不是覆盖。
https://stackoverflow.com/questions/74018059
复制相似问题