package com.albedo.java.modules.web;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
/**
* 运行主类
*/
public static void main(String[] args) throws IOException {
// 设置数据源,可以为文件也可以为文件夹
File srcFile = new File("D:\\src");
// 设置拷贝目的地,这里必须为文件夹
File destFile = new File("D:\\copy");
// 拷贝文件
allFile(srcFile, destFile);
}
/**
* 将srcFile拷贝到destFile处
* 判断srcFile类型,若为文件直接复制,若为文件夹,通过递归获取下级文件。
*
* @param srcFile 源文件
* @param destFile 目标文件
*/
private static void allFile(File srcFile, File destFile) throws IOException {
if (destFile.isFile()) {
throw new RuntimeException("拷贝目的地应该为文件夹路径!!");
}
// 数据源为文件夹,采用递归法进行复制
if (srcFile.isDirectory()) {
// 获取当前层级下的所有文件,文件夹
File[] files = srcFile.listFiles();
// 开始遍历当前文件夹下所有文件,若为文件,直接拷贝。若为文件夹,递归深入。
if (files != null) {
if (files.length > 0) {
for (File file : files) {
// 为文件,直接拷贝
if (file.isFile()) {
copy(file, destFile);
} else {
// 为文件夹,直接递归当前方法
allFile(file, new File(destFile, file.getName()));
}
}
} else {
// 这是一个空文件夹,也需要创建
destFile.mkdirs();
}
}
} else {
// 数据源为文件,直接复制
copy(srcFile, destFile);
}
}
/**
* 将srcFile拷贝到destFile处
*
* @param destFile 目的地
* @param srcFile 需要拷贝的文件
* @throws IOException io异常
*/
private static void copy(File srcFile, File destFile) throws IOException {
// 创建目标路径
destFile.mkdirs();
// 采用字节缓冲流进行读取,字节缓冲流进行输出
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(new File(destFile, srcFile.getName()));
int read;
// 设置buffer,每次读取1M进行拷贝
byte[] fileBuffer = new byte[8192];
while ((read = fis.read(fileBuffer)) != -1) {
fos.write(fileBuffer, 0, read);
}
// 记得关闭连接
fos.close();
fis.close();
System.out.printf("文件:【%s】复制完成", srcFile.getAbsolutePath());
}
}
Java 文件拷贝(java.io,使用FileInputStream,FileOutputStream实现)
于 2023-07-05 21:48:20 首次发布