欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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();
            }
        }
    }