在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之一。
-
package importdata.util;
-
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import java.nio.channels.FileChannel;
-
import java.util.HashMap;
-
import java.util.Iterator;
-
import java.util.Map;
-
-
/**
-
* @Title: FileCopy.java
-
* @Package: importdata.util
-
* @author: beckham
-
* @date 2014-8-10 上午10:01:54
-
*/
-
public class FileCopy {
-
-
/**
-
* @Description:
-
* @param args
-
* void
-
*/
-
public static void main(String[] args) {
-
-
System.out.println("begin");
-
String fileFileName="E:\\images\\circle\\海报720";
-
//改目录下的所有完整文件名<k,v><文件名.jpg,文件全称含路径>
-
HashMap<String,String>imagesFileName=UserAccountUtil.getFilePath(fileFileName);
-
-
final String targetDir="E:\\images\\circle\\720\\";
-
Iterator iter=imagesFileName.entrySet().iterator();
-
int i=0;
-
int dirIndex=1;
-
while(iter.hasNext())
-
{
-
if(i==230){
-
dirIndex++;
-
i=0;
-
}
-
Map.Entry entry = (Map.Entry) iter.next();
-
String key=(String) entry.getKey();
-
String val=(String) entry.getValue();
-
String dFilename=targetDir+dirIndex+"\\"+key;
-
System.out.println(dFilename+" : "+val);
-
File s=new File(val);
-
File t=new File(dFilename);
-
fileChannelCopy(s,t);
-
i++;
-
}
-
-
System.out.println("the end");
-
}
-
-
/**
-
*
-
* @Description:
-
* @param s
-
* @param t
-
* void
-
*/
-
public static 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();
-
}
-
-
}
-
-
}
-
-
}
阅读(3438) | 评论(0) | 转发(0) |