您的位置:首页 > 编程语言 > Java开发

java文件复制最快的方法!

2013-02-19 17:34 351 查看
package a_a_a;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileCopy {

public static void main(String[] args) {

File srcFile = new File("G:/2144/bei.xlsx");
File destDir = new File("G:/2144/bei/");
String newFileName = "bei.xlsx";
FileCopy.copyFile(srcFile, destDir, newFileName);

//		long t1 = System.currentTimeMillis();
//		for (int i = 0; i < 100; i++) {
//			FileCopyTest.copyFile1(srcFile, destDir, newFileName);
//		}
long t2 = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
FileCopy.copyFile(srcFile, destDir, newFileName);
}
long t3 = System.currentTimeMillis();
//		System.out.println(t2-t1);
System.out.println(t3-t2);
System.out.println(250);
}

/**
* 复制文件
*
* @param srcFile
*            源文件File
* @param destDir
*            目标目录File
* @param newFileName
*            新文件名
* @return 实际复制的字节数,如果文件、目录不存在、文件为null或者发生IO异常,返回-1
*/
public 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 copyFile(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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: