1、文件递归拷贝
import java.io.*;
public class Test {
//文件目录递归拷贝
public static void main(String[] args) throws Exception {
String sourceFileDir = "D:\\MusicProject\\Version2.0\\music-project - 副本";
String targetFileDir = "D:\\MusicProject\\Version2.0\\IO流";
copy(sourceFileDir, targetFileDir);
}
public static void copy(String sourceFileDir, String targetFileDir) throws Exception {
//创建File类抽象对象:文件和目录路径名的抽象表示形式。
File fileSource = new File(sourceFileDir);
//获取当前目录下面的子目录及文件
File[] files = fileSource.listFiles();
for (File f : files) {
//获取文件名及属性
System.out.println(f.getName());
if (f.isFile()) {
//创建文件输入流
FileInputStream in = new FileInputStream(f);
//创建文件输出流,对应文件名
FileOutputStream out = new FileOutputStream(targetFileDir + "\\" + f.getName());
//创建byte数值,用来储存读取的部分文件
byte[] bytes = new byte[1024];//一次读取一kb
int readLength;
//读取文件,并返回读取的长度,为-1表示文件读取结束
while ((readLength = in.read(bytes)) != -1) {
//System.out.println(readLength);
// System.out.println("............")
//通过输出流写入当前文件,write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
out.write(bytes, 0, readLength);
}
//关闭输入流
in.close();
//刷新输出流,清空管道
out.flush();
//关闭输出流
out.close();
} else if (f.isDirectory()) {
//创建目录
new File(targetFileDir + "\\" + f.getName()).mkdir();
//递归
copy(sourceFileDir + "\\" + f.getName(),targetFileDir + "\\" + f.getName());
}
}
}
}