Java如何快速复制大文件

如题所述

我希望从本地和远程复制文件,文件都很大,10G级的,如何快速的复制?看网上有人说使用管道到管道,这确实比其他的快,不知道fastcopy是怎样实现的 本地远程复制大文件啊,而且还是10G这么大的。你看看迅雷啊,他是多部分一起传的。Java传输文件就是一般的文件操作啊,你可以模仿迅雷,开多个线程下载,每个线程记录下载部分的开始和结束索引,一起下到远程去。至于效率有多高,Java我还真不敢说,要不迅雷,快车这种工具怎么不用Java来开发。用FileChannel的transferTo(long position, long count, WritableByteChannel target)方法试试用FileChannel的transferTo(long position, long count, WritableByteChannel target)方法试试public static void main(String[] args)throws Exception{FileInputStream fileIn=new FileInputStream("d:/JavaTests/TestFileChannel.txt");FileOutputStream fileOut=new FileOutputStream("d:/JavaTests/TestFileOutputStreamCopyTime.txt");int i;long l=System.currentTimeMillis();while((i=fileIn.read())!=-1){fileOut.write(i);}System.out.println("Take time:"+(System.currentTimeMillis()-l)+"ms");//516msfileIn.close();本地远程复制大文件啊,而且还是10G这么大的。你看看迅雷啊,他是多部分一起传的。Java传输文件就是一般的文件操作啊,你可以模仿迅雷,开多个线程下载,每个线程记录下载部分的开始和结束索引,一起下到远程去。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-02
在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之一。下面我就来介绍一下如何用文件通道来实现文件复制,以及在效率上的对比

用文件通道的方式来进行文件复制
/**
* 使用文件通道的方式复制文件
*
* @param s
* 源文件
* @param t
* 复制到的新文件
*/
public void fileChannelCopy(File s, File t) {
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream(s);
fo = new FileOutputStream(t);
in = fi.getChannel();//得到对应的文件通道
out = fo.getChannel();//得到对应的文件通道
in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
相似回答