繁体   English   中英

使用 apache Apache Commons VFS 合并两个文件的有效方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM