从键盘接收两个文件夹路径,把其中一个文件夹中的内容拷贝到另一个文件夹中

时间:2021-12-28 23:03:51

前话:

在下面的程序段中,将IOException进行抛出,未做try catch finally处理


正式内容:

    /**
*程序段入口
*/
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();            }        }    }