[英]Efficient way to merge two files using apache Apache Commons VFS
我有两个大文件需要合并到另一个文件。 目前我正在使用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 ");
}
}
文件非常大,我限制了 memory。有什么有效的方法可以更快地合并文件,而不是将整个内容作为字符串获取? 使用任何第三方库(如apache-commons-io
而不是BufferedWriter
)是否可以提高性能?
是的,正确的方法写在FileContent文档页面的顶部:
要从文件中读取,请使用 getInputStream() 返回的 InputStream。
因此,将您拥有的替换为:
fileObject.resolveFile(pathToExport+file).getContent()
.getInputStream()
.transferTo(fileOutputStream);
请注意,您的代码当前并未合并文件,而是用每个新文件覆盖 file3.txt。 您可能应该 append 到 output stream 而不是覆盖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.