统计该文件夹大小

递归计算 首先传入文件夹 将本层文件夹内所有的文件及文件夹计入数组,循环数组中的变量,如果是文件则累加入累加器,如果是文件夹则继续调用该函数直到遇到文件为止。

package com.heima.test;

import java.io.File;
import java.util.Scanner;

/**
 * Code by pureqh on 2021-03-02
 * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小
 * 从键盘接收一个文件夹路径
 * 1,创建键盘录入对象
 * 2,定义一个无限循环
 * 3,将键盘录入的结果存储并封装成file对象
 * 4,对file对象判断
 * 5,将文件夹路径对象返回
 *
 * 统计该文件夹大小
 * 1,定义一个求和变量
 * 2,获取该文件夹下所有的文件和文件夹listFiles();
 * 3,遍历数组
 * 4,判断是文件就计算大小并累加
 * 5,判断是文件夹,递归调用
 */

public class Test1 {
    public static void main(String[] args) {
        File dir = getDir();
        System.out.println(getFileLength(dir));
    }
    /*
     * 从键盘接收一个文件夹路径
     * 1,返回值类型File
     * 2,参数列表无
     * */

    public static File getDir(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个文件夹路径");
        while (true){
            //将键盘录入的结果存储并封装成file对象
            String line = sc.nextLine();
            File dir = new File(line);
            //对file对象判断
            if(!dir.exists()){
                System.out.println("您录入的文件夹路径不存在,请输入一个文件夹路径");
            }else if(dir.isFile()){
                System.out.println("您录入的是一个文件路径,请输入一个文件夹路径");
            }else{
                return dir;
            }
        }
    }
    /*统计该文件夹大小
    1,返回值类型
    2,参数列表 File dir
    * */

    public  static long getFileLength(File dir){
        //1,定义求和变量
        long len = 0;
        //获取该文件夹下所有的文件和文件夹listFiles
        File[] subFiles = dir.listFiles();
        //遍历数组
        for (File subFile : subFiles) {
            if (subFile.isFile()){
                len = len + subFile.length();
            }else{
                len = len +getFileLength(subFile);
            }
           
        }
        return len;
    }
}

删除该文件夹

package com.heima.test;

import java.io.File;

/**
 * Code by pureqh on 2021-03-02
 * 从键盘接受一个文件夹路径,删除该文件夹
 *
 * 删除该文件夹
 * 1,获取该文件夹下的所有的文件和文件夹
 * 2,遍历数组
 * 3,判断是文件直接删除
 * 4,如果是文件夹,递归调用
 * 5,循环结束后,把空文件夹删掉
 */

public class Test2 {
    public static void main(String[] args) {
        File dir = Test1.getDir();
        deleteFile(dir);
    }
    /*
    * 删除该文件夹
    * 返回值:void
    * 参数列表:File Dir
    * */

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

拷贝

package com.heima.test;

import java.io.*;

/**
 * Code by pureqh on 2021-03-02
 * 需求:从键盘接收两个文件夹路径,从一个文件夹复制所有的东西到另一个文件夹
 *
 * 拷贝
 * 分析
 * 1,在目标文件夹中创建原文件夹
 * 2,获取原文件夹中所有的文件和文件夹,存储在File数组中
 * 3,遍历数组
 * 4,如果是文件就用IO流读写
 * 5,如果是文件夹就递归调用
 */

public class Test3 {
    public static void main(String[] args) throws IOException {
        File src = Test1.getDir();
        File dest = Test1.getDir();
        if (src.equals(dest)){
            System.out.println("目标文件夹是源文件夹的子文件夹");
        }else{
        copy(src,dest);}
    }
    /*
    * 从一个文件夹复制所有的东西到另一个文件夹
    * 1,返回值类型void
    * 2,参数列表File src,File dest
    * */

    private static void copy(File src, File dest) throws IOException {
        //在目标文件夹中创建原文件夹
        File newDir = new File(dest,src.getName());
        newDir.mkdir();
        //获取原文件夹中所有的文件和文件夹,存储在File数组中
        File[] subFiles = src.listFiles();
        //遍历数组
        for (File subFile:subFiles
             ) {
            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();

            }else{
                copy(subFile,newDir);
            }

        }
    }
}

按层级打印

package com.heima.test;
import java.io.File;
/**
 * Code by pureqh on 2021-03-02
 * 需求:从键盘接收一个文件夹路径,把文件夹中的所有文件及文件夹的名字按层级打印
 *
 * 分析:
 * 1,获取所有文件和文件夹,返回的File数组
 * 2,遍历数组
 * 3,无论是文件还是文件夹都需要直接打印
 * 4,如果是文件夹,递归调用
 */

public class Test4 {
    public static void main(String[] args) {
        File dir = Test1.getDir(); //获取文件夹路径
        printLev(dir,0);
    }
    public static void printLev(File dir,int lev) {
        //获取所有文件和文件夹,返回的File数组
        File[] subFiles = dir.listFiles();
        //遍历数组
        for (File subFile: subFiles
             ) {
            String headStr = "";
            for (int i = 0; i <=lev ; i++) {
                headStr +="\t";
            }
            System.out.println(headStr + subFile.getName());
            //无论是文件还是文件夹都需要直接打印
            System.out.println(subFile);
            if (subFile.isDirectory()){
                printLev(subFile,lev+1);
            }
        }
    }
}

斐波那契数列

package com.heima.test;
/**
 * Code by pureqh on 2021-03-02
 * 斐波那契数列
 */

public class Test5 {
    public static void main(String[] args) {
        //demo1();
        System.out.println(fun(8));
    }
    private static void demo1() {
        int[] arr = new int[8];
        arr[0] = 1;
        arr[1] = 1;
        for (int i = 2; i <arr.length ; i++) {
            arr[i]  = arr[i-2] +arr[i-1];
        }
        System.out.println(arr[arr.length-1]);
    }
    public static  int fun(int num){
        if(num == 1 || num == 2){
            return 1;
        }else{
            return fun(num -2) + fun(num -1);
        }
    }
}

1000的阶乘所有零和尾部零的个数

package com.heima.test;
import java.math.BigInteger;
/**
 * Code by pureqh on 2021-03-02
 * 1000的阶乘所有零和尾部零的个数
 */

public class Test6 {
    public static void main(String[] args) {
        //demo1();
        demo2();
    }
    /*
    * 获取1000的阶乘尾部0*/

    private static void demo2() {
        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();    //获取字符串表现形式
        StringBuilder sb = new StringBuilder(str);
        str=sb.reverse().toString();    //链式编程
        int count = 0 ; //定义计数器
        for (int i = 0; i <str.length() ; i++) {
            if ('0'!=str.charAt(i)){
                break;
            }else{
                count++;
            }
        }
        System.out.println(count);
    }
    /*
    * 求所有0
    * */

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

约瑟夫环

package com.heima.test;
import java.util.ArrayList;
/**
 * Code by pureqh on 2021-03-03
 * 约瑟夫环
 */

public class Test8 {
    public static void main(String[] args) {
        System.out.println(getLuckyNam(8));
    }
    /*
    * 获取幸运数字
    * 1,返回值类型int
    * 2,参数列表int num
    * */

    public static int getLuckyNam(int num){
        ArrayList<Integer> list = new ArrayList<>();    //创建集合1到num的对象
        for (int i = 1; i <=num ; i++) {
            list.add(i);    //将1到num存储到集合中
            //System.out.println(list);
        }
        int count = 1;      //计数器 只要是3的倍数就remove
        for (int i = 0; list.size() != 1 ; i++) {     //只要集合超过1就一直remove
            if (i == list.size()){   //如果i增长到姬和最大索引加1时
                i = 0;        //重新归零
            }
            if (count % 3 == 0){    //如果是3的倍数就remove
                list.remove(i);
                i--;
            }
            count++;
        }
        return list.get(0);
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注