从键盘接收两个文件夹路径,把其中一个文件夹中的内容拷贝到另一个文件夹中
程序员文章站
2022-06-16 13:42:51
...
前话:在下面的程序段中,将IOException进行抛出,未做处理
正式内容:
/**
*程序段入口
*/
public static void task_1() throws IOException{
System.out.println("input path 1:");
//源文件对象,需要复制的文件
File file1 = getPath();
System.out.println("input path 2:");
//目的文件对象,复制到指定文件夹的对象
File file2 = getPath();
copyFile(file1,file2);
}
/*
* 从键盘录入文件夹路径,并判断属否为合法路径,返回一个File对象
*
* */
public static File getPath() throws IOException{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String line = null;
File file = null;
while ((line=bufr.readLine()) != null){
file = new File(line);
//判断路径是否合法
if (file.exists()){
break;
}else {
System.out.println("wrong path, input again:");
}
}
return file;
}
/*
* 主要功能程序段
* 整体思路仍然是使用递归
* */
public static void copyFile(File file1, File file2) throws IOException{
FileInputStream fis = null;
FileOutputStream fos = null;
//利用for循环遍历当前文件夹中每一个File对象
File[] files = file1.listFiles();
for (File f : files){
if (f.isDirectory()){
//如果是文件夹,需要现在file2中创建一个名称相同的文件夹,
// 然后再递归到该文件夹里面,复制相应的文件
//对于创建的文件夹名称,需要获取到file2绝对路径,然后加上f的名称
File file = new File(file2.getAbsolutePath()+"\\"+f.getName());
file.mkdir();
//此处就需要进入新建的文件夹内部进行递归
//这样才能复制该文件夹内的文件
copyFile(f,file);
}else {
//如果是文件,就是用常规方法进行文件的复制
//在输出file2的文件名称 需要先获取到f的文件名称 然后加上file2的绝对路径
//这样就能创建一个名称相同的文件(注意此处需要加上 "\\")
//之后再不断地复制内容
fis = new FileInputStream(f);
fos = new FileOutputStream(file2.getAbsolutePath()+"\\"+ f.getName());
byte[] buf = new byte[1024];
int len = 0;
while ((len=fis.read(buf)) != -1){
fos.write(buf, 0, len);
}
fis.close();
fos.close();
}
}
}
上一篇: 枚举类的用法
下一篇: ThinkPHP 项目分组配备