File类、递归、过滤器

File类、递归、过滤器

File类

1.2、构造方法
三种构造
  public File(String pathname)                 //参数: 文件的路径【推荐】
  public File(String parent, String child)     //参数: 父文件路径  和 子文件名称
  public File(File parent, String child)       //参数: 父文件的对象 和 子文件的名称
1.3、常用方法
A.增(创建)
        public boolean createNewFile() //创建文件
        public boolean mkdir() //创建文件夹
        public boolean mkdirs() //创建文件夹【推荐】
B.删(删除)
        public boolean delete() //文件可以直接删除,文件夹需要清空子文件删除 
C.改(修改)
        public boolean renameTo(File dest)  //修改文件名称 
D.查(获取和判断)
        public String getAbsolutePath()     //获取绝对路径 
        public String getPath()      //获取File的构造方法路径 
        public String getName()      //获取File的名字 
        public long length()        //获取文件的大小(文件夹的大小,是所有文件大小之和)
        public String[] list()      //获取下一层子文件.字符串数组
        public File[] listFiles()    //获取下一层子文件.File对象数组【推荐】
        public boolean exists()      //判断文件或者文件夹是否存在 
        public boolean isDirectory() //判断是否是文件夹
        public boolean isFile()      //判断是否是文件
1.4、目录的遍历
  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录
public class FileFor {
    public static void main(String[] args) {
        File dir = new File("d:\\java_code");

        //获取当前目录下的文件以及文件夹的名称。
        String[] names = dir.list();
        for(String name : names){
            System.out.println(name);
        }
        //获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
        File[] files = dir.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
    }
}
1.5、注意事项
A. 路径问题
    a.相对路径:不带盘符,在idea的相对于项目路径,对于module下面的文件夹,需要加上module名称
    b.绝对路径: 带有盘符,需要给出完整的路径
B. 创建文件或文件夹
    根据方法的名称来确定是文件还是文件夹,不是根据路径来确定

递归

1.2、递归的分类及注意事项

递归:指在当前方法内调用自己的这种现象。

•递归的分类:
     递归分为两种,直接递归和间接递归。
     直接递归称为方法自身调用自己。
     间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

•注意事项:
     递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
     在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
     构造方法,禁止递归。


1.3、递归打印多级目录
public class DiGuiDemo2 {
    public static void main(String[] args) {
        // 创建File对象
        File dir  = new File("D:\\aaa");
        // 调用打印目录方法
        printDir(dir);
    }

    public static void  printDir(File dir) {
        // 获取子文件和目录
        File[] files = dir.listFiles();
        // 循环打印
        /*
          判断:
          当是文件时,打印绝对路径.
          当是目录时,继续调用打印目录的方法,形成递归调用.
        */
        for (File file : files) {
            // 判断
            if (file.isFile()) {
                // 是文件,输出文件绝对路径
                System.out.println("文件名:"+ file.getAbsolutePath());
            } else {
                // 是目录,输出目录绝对路径
                System.out.println("目录:"+file.getAbsolutePath());
                // 继续遍历,调用printDir,形成递归
                printDir(file);
            }
        }
    }
}

过滤器

1.2过滤器
java.io.FileFilter是一个接口,是File的过滤器。 该接口的对象可以传递给File类的listFiles(FileFilter) 作为参数, 接口中只有一个方法。

boolean accept(File pathname) :测试pathname是否应该包含在当前File目录中,符合则返回true。

三参数问题 (高内聚"独立"与低耦合"依赖"思想)
     public static void diGuiFile(File mFile,List<File> dirList,List<File> fileList)
1.3、文件过滤器 FileFilter 的使用方式<筛选所有的java文件数据>
//A. 匿名内部类用法
File[] fileArr = mFile.listFiles(new FileFilter() {
     @Override
     public boolean accept(File pathname) {
           return pathname.getName().endsWith(".java")||pathname.isDirectory();
     }
});
//B. Lambda表达式用法
File[] fileArr = mFile.listFiles((f)->f.getName().endsWith("java")||f.isDirectory());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值