ACAC copy目录(成功)

package practice;
import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 *  H:\Java\bin\server文件夹为空, 为什么会出现这种问题:
 *  if(infile.length() == 0)这行代码有问题,如果是文件夹的话(java/bin/server/),server
 *  就算里面有文件,他也读不出来,只能读到server,所以以后判断里面有没有文件时,还是用File【】 a = ss.listFiles()
 *  用a.length去判断
 */
public class Test02 {
    
    
    public static void main(String[] args) {
    
    

        java.util.Scanner in = new Scanner(System.in);
        java.util.Scanner out = new Scanner(System.in);
        Copy02 copy = new Copy02();
        System.out.println("请输入起始目录(绝对路径)如 H:\\Java  H:\\editPlus ");
        String begin = in.next();
        System.out.println("请输要复制到哪里的目录(如果是复制到盘里,直接输入盘的名称:如D: 或者输入绝对路径,如H:\\a\\b\\c\\d\\e ");
        String over = out.next();

        Date date = new Date();
        SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss SSS");

        double begintime = System.currentTimeMillis();

        copy.copy02(begin,over);
        Date date1 = new Date();

        double overtime = System.currentTimeMillis();

       // DecimalFormat df = new DecimalFormat("#.00");
       // String time = df.format((overtime - begintime)/1000);
        String time = String.format("%.2f",((overtime - begintime)/1000));
        System.out.println("复制文件共用时 :" + time + " 秒");

    }
}

class Copy02{
    
    
    public void copy02(String in,String out){
    
    
        //获取目录和文件
        File infile = new File(in);

        //由于file.listFiles()方法不能获取文件夹,所以要先把根目录建立
        String chuShi = in.substring(2);
        File file09 = new File( out + chuShi);
        if(file09.exists()){
    
    
            return;
        }else {
    
    
            file09.mkdir();
            System.out.println(file09.toString() + "根目录建立成功!!!");
        }

        //看文件夹里的文件
        File[] mulu = infile.listFiles();
        if(mulu.length == 0){
    
    
            System.out.println( infile + "文件夹为空,就这也要劳烦我JVM???");
            return;
        }else {
    
    
            //文件夹里不为空的话,获取所有目录(或者文件路径)这方法只能获取文件,不能获取文件夹
            //其实也能读到文件夹,不过位置不确定,可能回最后读到
            for (File wenjian : mulu) {
    
    
                //如果是文件,返回
                if (!(wenjian.isDirectory())) {
    
    
                    FileInputStream inputStream = null;
                    FileOutputStream outputStream = null;
                    //开始复制(文件)
                    try {
    
    
                        inputStream = new FileInputStream(wenjian);
                        /**
                         * 注意:这个new 里面可以传个File,就是上面的wenjian
                         * 假设复制到I盘:H:\editPlus  \editPlus,从第二个字符开始截取
                         */
                        String luJing =  wenjian.getAbsolutePath().substring(2);
                        System.out.println((out + luJing )+ "复制成功!!!");
                        outputStream = new FileOutputStream(out + luJing);
                        byte[] bytes = new byte[1024 * 1024]; //1MB
                        int readCount = 0;
                        while((readCount = inputStream.read(bytes)) != -1){
    
    
                            outputStream.write(bytes,0,readCount);
                        }
                        outputStream.flush();
                    } catch (FileNotFoundException e) {
    
    
                        e.printStackTrace();
                    } catch (IOException e) {
    
    
                        e.printStackTrace();
                    }finally {
    
    
                        if (inputStream != null) {
    
    
                            try {
    
    
                                inputStream.close();
                            } catch (IOException e) {
    
    
                                e.printStackTrace();
                            }
                        }
                        if (outputStream != null) {
    
    
                            try {
    
    
                                outputStream.close();
                            } catch (IOException e) {
    
    
                                e.printStackTrace();
                            }
                        }
                    }
                } else {
    
    
                    copy02(wenjian.getAbsolutePath(),out);
                    //是文件夹,直接调用它本身,方法开头会建立文件夹
                }
            }
        }
    }
}
下面的只能copy一个文件夹,也是失败的

package practice;

import java.io.*;
import java.util.Scanner;

public class Test {
    
    
    public static void main(String[] args) {
    
    

        java.util.Scanner in = new Scanner(System.in);
        java.util.Scanner out = new Scanner(System.in);

        Copy copy = new Copy();
        System.out.println("请输入起始目录(绝对路径):");
        String begin = in.next();
        System.out.println("请输要复制到哪里的目录(如果是复制到盘里,直接输入盘的名称:如D: 或者输入绝对路径,如H:\\a\\b\\c\\d\\e ");
        String over = out.next();

        copy.copy(begin,over);  //H:\editPlus
    }
}

class Copy{
    
    

    public void copy(String in,String out){
    
    
        //获取目录和文件
        File infile = new File(in);

       // File[] mulu01 = infile.listFiles();

        //由于file.listFiles()方法不能获取文件夹,所以要先把根目录建立

        String chuShi = null;
        //in.length() == 1 ?  chuShi = in.substring(2) : chuShi =

        chuShi = in.substring(2);
        File file09 = new File( out + chuShi);

        if(file09.exists()){
    
    
            return;
        }else {
    
    
            file09.mkdir();
            System.out.println(file09.toString() + "根目录建立成功!!!");
        }

        if(infile == null){
    
    
            return;
        }else {
    
    
            //文件夹里不为空的话,获取所有目录(或者文件路径)

            //这方法只能获取文件,不能获取文件夹

            File[] mulu = infile.listFiles();

            for (File wenjian : mulu) {
    
    
                //如果是文件,返回
                if (wenjian.isFile()) {
    
    

                    String i = wenjian.getAbsolutePath();

                    FileInputStream inputStream = null;
                    FileOutputStream outputStream = null;

                    //开始复制(文件)
                    try {
    
    

                         inputStream = new FileInputStream(i);


                        //假设复制到I盘:H:\editPlus  \editPlus,从第二个字符开始截取

                        String luJing = i.substring(2);

                        //Out + luJing = I + :editPlus

                        String outLuJing = out + luJing;

                        System.out.println(outLuJing);
                        System.out.println(outLuJing + "复制成功!!!");

                        outputStream = new FileOutputStream(outLuJing);
                        byte[] bytes = new byte[1024 * 1024]; //1MB

                        int readCount = 0;
                        while((readCount = inputStream.read(bytes)) != -1){
    
    
                            outputStream.write(bytes,0,readCount);
                        }
                        outputStream.flush();
                    } catch (FileNotFoundException e) {
    
    
                        e.printStackTrace();
                    } catch (IOException e) {
    
    
                        e.printStackTrace();
                    }finally {
    
    
                        if (inputStream != null) {
    
    
                            try {
    
    
                                inputStream.close();
                            } catch (IOException e) {
    
    
                                e.printStackTrace();
                            }
                        }
                        if (outputStream != null) {
    
    
                            try {
    
    
                                outputStream.close();
                            } catch (IOException e) {
    
    
                                e.printStackTrace();
                            }
                        }
                    }

                } else {
    
    
                    //不是文件(说明是文件夹)
                    String wenJianJiaLuJing = wenjian.getAbsolutePath();

                    String luJing01 = wenJianJiaLuJing.substring(2);
                    File file01 = new File( out + luJing01);

                    //看这个文件夹在I盘是否存在
                    if(file01.exists()){
    
    
                        return;
                    }else {
    
    
                        file01.mkdirs();
                        System.out.println(file01.toString() + "文件夹复制成功0000000000000000000");
                    }

                    copy(wenjian.getParent(),out);
                }

            }

        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_44707513/article/details/110674339