实现文件复制有多种方法
1 使用Files 的 copy
2 使用stream 如 FileWriter FileReader 实现
3 使用FileChannel
推荐使用 FileChannel ,FileChannel 多线程 速度快 没有文件编码问题
但是FileChannel是 Java7的新特性
1 使用File copy
public static boolean copyFile1(File fromFile, File toFile)
throws IOException {
if (fromFile == null || toFile == null) {
return false;
}
Path destination = Files.copy(fromFile.toPath(), toFile.toPath(),
StandardCopyOption.REPLACE_EXISTING);
if (destination.equals(toFile.toPath())) {
return true;
}
return false;
}
2 使用流
public static boolean copyFile2(File fromFile, File toFile) {
if (fromFile == null || toFile == null) {
return false;
}
// copy file
try (BufferedReader reader = new BufferedReader(
new FileReader(fromFile));
BufferedWriter writer = new BufferedWriter(
new FileWriter(toFile))) {
String line = null;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
3 使用FileChannel
public static boolean copyFile3(File fromFile, File toFile) {
if (fromFile == null || toFile == null) {
return false;
}
// copy file
try (FileInputStream in = new FileInputStream(fromFile);
FileOutputStream ou = new FileOutputStream(toFile);
FileChannel ci = in.getChannel();
FileChannel co = ou.getChannel()) {
long size = ci.transferTo(0, ci.size(), co);
if (size == fromFile.length()) {
return true;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}