拷贝文件或文件夹
/**
* 拷贝文件
*
* @param source 源文件
* @param target 目标文件
*/
public void copyFile(String source, String target) {
// 源文件
File sourceFile = new File(source);
if (!sourceFile.exists()) {
return;
}
// 目标文件
File targetFile = new File(target);
// 文件拷贝
if (sourceFile.isFile()) {
copyFromChanel(sourceFile, targetFile);
return;
}
// 文件夹拷贝
if (!targetFile.exists()) {
targetFile.mkdirs();
}
for (File file: sourceFile.listFiles()) {
copyFile(file.getAbsolutePath(), target + File.separator + file.getName());
}
}
利用文件管道拷贝文件
/**
* 利用文件管道拷贝文件
*
* @param source 源文件
* @param target 目标文件
*/
public void copyFromChanel(File source, File target) {
// 文件流
FileInputStream fis = null;
FileOutputStream fos = null;
// 文件管道
FileChannel fci = null;
FileChannel fco = null;
try {
// 文件流
fis = new FileInputStream(source);
fos = new FileOutputStream(target);
// 文件管道
fci = fis.getChannel();
fco = fos.getChannel();
// 连接两个通道,并且从fci通道读取,然后写入fco通道
fci.transferTo(0, fci.size(), fco);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) fis.close();
if (fci != null) fci.close();
if (fos != null) fos.close();
if (fco != null) fco.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}