如果您想有效地合并两个或多个文件,则应问自己,为什么要使用
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."); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)