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

前话:在下面的程序段中,将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();
            }
        }
    }


猜你喜欢

转载自blog.csdn.net/baidu_37378518/article/details/76785320