java递归实现多级菜单栏_File类、递归

本文介绍了使用Java的File类进行文件操作,包括构造方法、常用方法、判断和创建删除功能。此外,详细讲解了递归的概念,强调递归必须有退出条件以防止栈内存溢出。通过递归实现1到n的和、阶乘计算,并重点展示了如何递归打印多级目录,同时提到了文件搜索和过滤器的优化方法。
摘要由CSDN通过智能技术生成

一、File类

1.File类的构造方法

75654bd5d19b18fd26b12738e7deed56.png

0e61138327095e33990c9bd5bf502fff.png

2.常用方法

import org.w3c.dom.stylesheets.DocumentStyle;

import java.io.File;

public class Demo01 {
    public static void main(String[] args) {
File f1 = new File("/Users/masahiro/Desktop/Java/");
        System.out.println(f1.getAbsolutePath());
        System.out.println(f1.getPath());
        System.out.println(f1.getName());
        System.out.println(f1.length());
        ///Users/masahiro/Desktop/Java
        ///Users/masahiro/Desktop/Java
        //Java
        //160


    }
}

3.判断功能的方法

import org.w3c.dom.stylesheets.DocumentStyle;
import java.io.File;
public class Demo01 {
    public static void main(String[] args) {
File f1 = new File("/Users/masahiro/Desktop/截屏2020-10-09 上午10.44.46.png");
        if(f1.exists()){
            System.out.println(f1.isDirectory());//是文件夹?
            System.out.println(f1.isFile());//是文件?
        }
    }
}

4.创建删除功能的方法

⚠️mac只能写绝对路径,不能写相对的。

=======================创建文件===================================
import org.w3c.dom.stylesheets.DocumentStyle;
import java.io.File;
import java.io.IOException;
public class Demo01 {
    public static void main(String[] args) throws IOException {
    show01();
        }
    private static void show01() throws IOException {
        File f1 = new File("/Users/masahiro/Desktop/Java/1.txt");
        boolean b1 = f1.createNewFile();
        System.out.println(b1);
    }
}
=========================创建文件夹================================
import org.w3c.dom.stylesheets.DocumentStyle;
import java.io.File;
import java.io.IOException;
public class Demo01 {
    public static void main(String[] args) throws IOException {
    show01();
        }
    private static void show01() throws IOException {
        File f1 = new File("/Users/masahiro/Desktop/文件夹");
        boolean b2 = f1.mkdirs();//创建文件夹,单级,多级用mkdirs。
        System.out.println(b2);
    }
}
=========================删除文件/文件夹=============================
import org.w3c.dom.stylesheets.DocumentStyle;
import java.io.File;
import java.io.IOException;
public class Demo01 {
    public static void main(String[] args) throws IOException {
    show01();
        }
    private static void show01() throws IOException {
        File f1 = new File("/Users/masahiro/Desktop/文件夹");
        boolean b2 = f1.delate();//直接硬盘删除。回收站没有
        System.out.println(b2);
    }
}

5.遍历目录

import org.w3c.dom.stylesheets.DocumentStyle;
import java.io.File;
import java.io.IOException;
public class Demo01 {
    public static void main(String[] args) throws IOException {
    show01();
        }
    private static void show01() throws IOException {
        File f1 = new File("/Users/masahiro/Desktop/Java/02-Java语法进阶");
        String[] arr = f1.list();//遍历这个文件夹里面的文件名字
        File[] arr2 = f1.listFiles();//整个的路径+文件夹名字都遍历出来
        for (String s : arr) {
            System.out.println(s);
        }
        System.out.println("=========");
        for (File s2 : arr2) {
            System.out.println(s2);
        }
    }
}

二、递归

方法自己调用自己。构造方法(与类名字相同的方法,分有参构造无参构造)不能递归。

递归要来一个条件限制,否则会发生栈内存溢出

public class Demo02 {
    public static void main(String[] args) {
        b(1);
    }
    private static void b(int i) {
        System.out.println(i);
        if(i==10000){
            return;
        }
        b(++i);
    }
}

递归计算1-n的和

public class Demo03 {
    public static void main(String[] args) {
        int s = sum(3);
        System.out.println(s);
    }
    public static int sum(int n ){
        if(n==1){
            return 1;
        }
        return n+sum(n-1);
    }
}

3d4d1aa6bc58a9c129f70ff76f834212.png

递归计算阶乘

把上面的代码return n *sum(n-1)就行

重点:递归打印多级目录

8a8dbb44ea9826a498efa6b294ab5a44.png
import java.io.File;
public class Demo03 {
    public static void main(String[] args) {
File file = new File("/Users/masahiro/Desktop/Java");
getAllFile(file);
    }
    public static void getAllFile(File dir ){
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()){
               getAllFile(file);
            }else {
                System.out.println(file);
            }
        }
    }
}

文件搜索:在前者的代码中添加一个if语句来判断

import java.io.File;
public class Demo03 {
    public static void main(String[] args) {
File file = new File("/Users/masahiro/Desktop/Java");
getAllFile(file);
    }
    public static void getAllFile(File dir ){
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()){
               getAllFile(file);
            }else {
                //只要xxx结尾的文件
                //1.把file转字符串file.toString
                //2.调用endWith方法(".xxx")xxx是文件后缀名
                //3.if
                if(file.toString().endsWith("jpg")){
                    System.out.println(file);
                }
            }
        }
    }
}

文件过滤器优化:

import java.io.File;
import java.io.FileFilter;

public class Demo03 {
    public static void main(String[] args) {
File file = new File("/Users/masahiro/Desktop/Java");
getAllFile(file);
    }
    public static void getAllFile(File dir ){
        File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory()||pathname.getName().endsWith("jpg");
            }
        });
        for (File file : files) {
            if (file.isDirectory()){
               getAllFile(file);
            }else {
                    System.out.println(file);
                }
            }
        }
    }

cb0ace48c25be860eecd69e4a4843619.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值