Java文件操作实例

//统计指定文件夹大小 
public static long getFileLength(File dir) {    
    //1,定义一个求和变量
    long len = 0;
    //2,获取该文件夹下所有的文件和文件夹listFiles();
    File[] subFiles = dir.listFiles();            
    //3,遍历数组
    for (File subFile : subFiles) {
        //4,判断是文件就计算大小并累加
        if(subFile.isFile()) {
            len = len + subFile.length();
        //5,判断是文件夹,递归调用
        }else {
            len = len + getFileLength(subFile);
        }
    }
    return len;
}





//删除指定文件夹
public static void deleteFile(File dir) {    
    //1,获取该文件夹下的所有的文件和文件夹
    File[] subFiles = dir.listFiles();        
    //2,遍历数组
    for (File subFile : subFiles) {
        //3,判断是文件直接删除
        if(subFile.isFile()) {
            subFile.delete();
        //4,如果是文件夹,递归调用
        }else {
            deleteFile(subFile);            
        }
    }
    //5,循环结束后,把空文件夹删掉
    dir.delete();
}





//把一个文件夹拷贝到另一个文件夹中
public static void copy(File src, File dest) throws IOException {
    //1,在目标文件夹中创建原文件夹
    File newDir = new File(dest, src.getName());
    newDir.mkdir();
    //2,获取原文件夹中所有的文件和文件夹,存储在File数组中
    File[] subFiles = src.listFiles();
    //3,遍历数组
    for (File subFile : subFiles) {
        //4,如果是文件就用io流读写
        if(subFile.isFile()) {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));//已有的
            BufferedOutputStream bos = 
                    new BufferedOutputStream(new FileOutputStream(new File(newDir,subFile.getName())));//新建的
            int b;
            while((b = bis.read()) != -1) {
                bos.write(b);
            }        
            bis.close();
            bos.close();
        //5,如果是文件夹就递归调用
        }else {
            copy(subFile,newDir);
        }
    }
}




//获取文件夹路径
public static File getDir() {
    //1,创建键盘录入对象
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个文件夹路径:");
    //2,定义一个无限循环
    while(true) {
        //3,将键盘录入的结果存储并封装成File对象
        String line = sc.nextLine();
        File dir = new File(line);
        //4,对File对象判断
        if(!dir.exists()) {
            System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径:");
        }else if(dir.isFile()) {
            System.out.println("您录入的是文件路径,请输入一个文件夹路径:");
        }else {
            //5,将文件夹路径对象返回
            return dir;
        }
    }            
}




//从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印
public static void printLev(File dir,int lev) {            //lev=0,从输入的文件夹开始递归
    //1,把文件夹中的所有文件以及文件夹的名字按层级打印
    File[] subFiles = dir.listFiles();
    //2,遍历数组
    for (File subFile : subFiles) {
        for(int i = 0; i <= lev; i++) {
            System.out.print("\t");
        }
        //3,无论是文件还是文件夹,都需要直接打印
        System.out.println(subFile);
        //4,如果是文件夹,递归调用
        if(subFile.isDirectory()) {
            //printLev(subFile,lev + 1);
            printLev(subFile,++lev);
        }
    }
}




//求1000的阶乘中所有的零
public static void demo() {        
    BigInteger bi1 = new BigInteger("1");
    for(int i = 1; i <= 1000; i++) {
        BigInteger bi2 = new BigInteger(i+"");
        bi1 = bi1.multiply(bi2);    //将bi1与bi2相乘的结果赋值给bi1
    }
    String str = bi1.toString();    //获取字符串表现形式
    int count = 0;
    for(int i = 0; i < str.length(); i++) {
        if('0' == str.charAt(i)) {    //如果字符串中出现了0字符
            count++;                //计数器加1
        }
    }
    System.out.println(count);
}





//ArrayList实现的约瑟夫环
public static int getLucklyNum(int num) {
    ArrayList<Integer> list = new ArrayList<>();        //创建集合存储1到num的对象
    for(int i = 1; i <= num; i++) {
        list.add(i);                    //将1到num存储在集合中
    }            
    int count = 1;                        //用来数数的,只要是3的倍数就杀人
    for(int i = 0; list.size() != 1; i++) {            //只要集合中人数超过1,就要不断的杀
        if(i == list.size()) {                //如果i增长到集合最大的索引+1时
            i = 0;                                        //重新归零
        }
        if(count % 3 == 0) {                //如果是3的倍数
            list.remove(i--);                                //就杀人
        }
        count++;
    }        
    return list.get(0);
}
发布了50 篇原创文章 · 获赞 7 · 访问量 4432

猜你喜欢

转载自blog.csdn.net/qq_37822034/article/details/82932077