公司维护期有个需求,要将大概2T的文件转移到其他盘
用IO从晚6点拷贝到凌成5点多
若使用NIO,效率高很多
FileChannel的transferTo方法:
/*
* @param file_Source 原文件路径
* @param file_Target 目标文件路径
* @return 返回操作用时时间
*
* */
public static long fileCopy_TransferTo(File file_Source, File file_Target)
throws Exception {
long time = new Date().getTime();
long size_Memory = 20971520;// 每段的内存大小设置20M
long length = 2097152;
FileInputStream fileInputStream = new FileInputStream(file_Source);
FileOutputStream fileOutputStream = new FileOutputStream(file_Target);
FileChannel fileChannel_fileInputStream = fileInputStream.getChannel();
FileChannel fileChannel_fileOutputStream = fileOutputStream
.getChannel();
while (true) {
if (fileChannel_fileInputStream.position() == fileChannel_fileInputStream
.size()) {
fileChannel_fileInputStream.close();
fileChannel_fileOutputStream.close();
return new Date().getTime() - time;
}
if ((fileChannel_fileInputStream.size() - fileChannel_fileInputStream
.position()) < size_Memory)
length = (fileChannel_fileInputStream.size() - fileChannel_fileInputStream
.position());
else
length = size_Memory;
fileChannel_fileInputStream.transferTo(
fileChannel_fileInputStream.position(), length,
fileChannel_fileOutputStream);
fileChannel_fileInputStream.position(fileChannel_fileInputStream
.position() + length);
}
}
FileChannel的transferFrom方法:
public static long fileCopy_TransferFrom(File file_Source, File file_Target)
throws Exception {
long time = new Date().getTime();
long size_Memory = 20971520;// 每段的内存大小设置20M
long length = 2097152;
FileInputStream fileInputStream = new FileInputStream(file_Source);
FileOutputStream fileOutputStream = new FileOutputStream(file_Target);
FileChannel fileChannel_fileInputStream = fileInputStream.getChannel();
FileChannel fileChannel_fileOutputStream = fileOutputStream
.getChannel();
while (true) {
if (fileChannel_fileOutputStream.position() == fileChannel_fileInputStream
.size()) {
fileChannel_fileInputStream.close();
fileChannel_fileOutputStream.close();
return new Date().getTime() - time;
}
if ((fileChannel_fileInputStream.size() - fileChannel_fileOutputStream
.position()) < size_Memory)
length = (fileChannel_fileInputStream.size() - fileChannel_fileOutputStream
.position());
else
length = size_Memory;
fileChannel_fileOutputStream.transferFrom(fileChannel_fileInputStream, fileChannel_fileOutputStream.position(), length);
fileChannel_fileOutputStream.position(fileChannel_fileOutputStream
.position() + length);
}
}