这是复制文件夹,通过键盘接收,它的原理是利用递归。
首先创建一个文件夹,然后遍历里面的每个文件对象,判断如果是文件,那么就用字节流或者字符流,拷贝文件,然后如果是文件夹,就利用递归。具体看下面的代码,如果不明白,我再详细的说明!
public class Exercise6 {
public static void main(String[] args) throws IOException {
File src = DirUtil.getDir(); // 从键盘接收一个文件夹路径
File dest = DirUtil.getDir(); // 从键盘接收另一个文件夹路径
copyDir(src, dest); // 将第一个文件夹中的内容拷贝到第二个文件夹中
}
/*
* src: F:\Itcast\WorkSpace\day21-8
* dest: F:\
* newDir: F:\day21-8
*
* 把day21-8整个文件夹复制到F:\下
*/
private static void copyDir(File src, File dest) throws IOException {
File newDir = new File(dest, src.getName()); // 在dest中创建一个和src同名的文件夹
newDir.mkdir();
File[] fileArr = src.listFiles(); // 获取src中的所有子文件
for (File subfile : fileArr) { // 循环遍历子文件
if (subfile.isFile()) { // 如果是文件, 直接拷贝
FileInputStream fis = new FileInputStream(subfile);
FileOutputStream fos = new FileOutputStream(new File(newDir, subfile.getName()));
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)
fos.write(buffer, 0, len);
fis.close();
fos.close();
} else { // 如果是文件夹, 递归
copyDir(subfile, newDir);
}
}
}
}
public class DirUtil {
public static File getDir() throws IOException {
System.out.println("请输入一个文件夹路径:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
File dir = new File(br.readLine());
if (!dir.exists())
System.out.println("路径不存在, 请重新输入:");
else if (!dir.isDirectory())
System.out.println("您输入的不是文件夹路径, 请重新输入:");
else
return dir;
}
}
} |