首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA复制资料最快的算法

2012-09-10 
JAVA复制文件最快的算法下面列举了两个拷贝文件的算法,第一个使用的是IO流--Buffered流,速度较慢;第二个方

JAVA复制文件最快的算法
    下面列举了两个拷贝文件的算法,第一个使用的是IO流--Buffered流,速度较慢;第二个方法使用的是java.nio.channels.FileChannel的transferTo方法,速度较快。所以推荐第二种方法。

/** * 复制文件 *  * @param srcFile *            源文件File * @param destDir *            目标目录File * @param newFileName *            新文件名 * @return 实际复制的字节数,如果文件、目录不存在、文件为null或者发生IO异常,返回-1 */public static long copyFile1(File srcFile, File destDir, String newFileName) {long copySizes = 0;if (!srcFile.exists()) {System.out.println("源文件不存在");copySizes = -1;} else if (!destDir.exists()) {System.out.println("目标目录不存在");copySizes = -1;} else if (newFileName == null) {System.out.println("文件名为null");copySizes = -1;} else {try {BufferedInputStream bin = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(new File(destDir, newFileName)));int b = 0, i = 0;while ((b = bin.read()) != -1) {bout.write(b);i++;}bout.flush();bin.close();bout.close();copySizes = i;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}return copySizes;}/** * 复制文件(以超快的速度复制文件) *  * @param srcFile *            源文件File * @param destDir *            目标目录File * @param newFileName *            新文件名 * @return 实际复制的字节数,如果文件、目录不存在、文件为null或者发生IO异常,返回-1 */public static long copyFile2(File srcFile, File destDir, String newFileName) {long copySizes = 0;if (!srcFile.exists()) {System.out.println("源文件不存在");copySizes = -1;} else if (!destDir.exists()) {System.out.println("目标目录不存在");copySizes = -1;} else if (newFileName == null) {System.out.println("文件名为null");copySizes = -1;} else {try {FileChannel fcin = new FileInputStream(srcFile).getChannel();FileChannel fcout = new FileOutputStream(new File(destDir,newFileName)).getChannel();long size = fcin.size();fcin.transferTo(0, fcin.size(), fcout);fcin.close();fcout.close();copySizes = size;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}return copySizes;}

热点排行