合并大文件而不将整个文件加载到内存中?

合并大文件而不将整个文件加载到内存中?,第1张

合并文件而不将整个文件加载到内存中?

如果您想有效地合并两个或多个文件,则应问自己,为什么要使用

char
基础文件
Reader
Writer
执行该任务。

通过使用这些类,您可以将文件的字节转换为字符,从系统的默认编码转换为unipre,然后从unipre转换回系统的默认编码。这意味着程序必须对整个文件执行两次数据转换。

而且,顺便说一句,

BufferedReader
BufferedWriter
绝不是
NIO2
假象。这些类自Java的第一个版本以来就存在。

当您通过实际的NIO函数使用字节方式复制时,文件可以被传输,而不会被Java应用程序所触摸,在最佳情况下,传输将直接在文件系统的缓冲区中进行:

import static java.nio.file.StandardOpenOption.*;import java.io.IOException;import java.nio.channels.FileChannel;import java.nio.file.Path;import java.nio.file.Paths;public class MergeFiles{  public static void main(String[] arg) throws IOException {    if(arg.length<2) {      System.err.println("Syntax: infiles... outfile");      System.exit(1);    }    Path outFile=Paths.get(arg[arg.length-1]);    System.out.println("TO "+outFile);    try(FileChannel out=FileChannel.open(outFile, CREATE, WRITE)) {      for(int ix=0, n=arg.length-1; ix<n; ix++) {        Path inFile=Paths.get(arg[ix]);        System.out.println(inFile+"...");        try(FileChannel in=FileChannel.open(inFile, READ)) {          for(long p=0, l=in.size(); p<l; ) p+=in.transferTo(p, l-p, out);        }      }    }    System.out.println("DONE.");  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5093286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存