import java.io.*;
public class FileTest {
public static void main(String[] args) throws IOException {
//定义输入输出流
File fisfile=new File("H:\\JavaStudy\\Offline_Study\\filetest1");//输入文件对象(被复制对象)
File fosfile=new File("H:\\JavaStudy\\Offline_Study\\filetest2");//输出文件对象(复制在这里)
f(fisfile,fosfile);
}
public static void f(File fis,File fos) throws IOException {
//文件拼接产生新的文件:\Offline_Study\filetest2\filetest1
File newFile = new File(fos, fis.getName());//要复制在输出位置里
// 判断newFile是否存在,不存在则创建目录
if (!newFile.exists()) {
newFile.mkdirs();
}
File[] files = fis.listFiles();//将输入的所有文件进行遍历,递归后第二次为文件夹内的文件进行遍历
if (files != null&&files.length>=0) {//集合不为空
for (File file : files) {
if(file.isFile()){//判断对象是文件还是文件夹
System.out.println("正在复制:" + file + "文件!");
FileInputStream fips=new FileInputStream(file);//架设输入内存的管道
//架设从内存输出的管道,将字节输入到该位置:\Offline_Study\filetest2\filetest1\a.txt
FileOutputStream fops=new FileOutputStream(new File(newFile,file.getName()));//字节输出流
int len;//创建长度
byte[] buffer=new byte[1024*8];//创建用来转移的桶
while ((len=fips.read(buffer))!=-1){
//在循环里将数据输出
fops.write(buffer,0,len);
}
//释放资源
fops.close();
fips.close();
} else if (file.isDirectory()) {//若为文件夹,则传入当前遍历的文件和要复制的位置进行拼接
f(file, newFile);
}
}
}
}
}