• File类的基本方法


    1.File 类的基本方法

      * String getAbsoluteFile(); // 返回该文件的绝对路径
      * String getPath(); // 只返回 File 构造方法传入的路径
      * String getName(); // 返回 File 构造方法后面一部分,文件/目录的名成
      * Long length(); // 返回文件的大小,不能返回文件夹大小

    2. File 类判断方法

      * boolean exists(); // 该文件/目录是否存在
      * boolean isDirectory(); // 是否是文件夹
      * boolean isFile(); // 是否是文件

    3. File 类创建删除功能的方法

      * boolean createNewFile(); // 当且仅当具有该文件名的文件不存在时,创建新的空文件。
      * delete(); // 删除由此File表示的文件或目录
      * mkdir(); //创建由此File 表示的目录:
         只能创建单级文件夹
      * mkdirs(); // 创建由此File 表示的目录,包括任何必需但不存在的父目录:
        既可以创建单级文件夹,也可以创建多级文件夹

    4. File 类的遍历(只能遍历目录)

      * String[] list(); // 表示该File目录中的所有 文件或目录的名称
      * File[] listFiles(); // 表示该File目录中的所有 文件或目录 File对象

    5.打印多级目录

      

    public class FileDemo5 {
        public static void main(String[] args) {
            fun1();
        }
    
        public static void fun1(){
            File file = new File("E:\Basics\IO");
            recursion(file,0);
        }
    
        public static void recursion(File file,int count){
            if(file.exists() && file.isDirectory()){
                File[] fileList = file.listFiles();
                for(File f : fileList){
                    if(f.isDirectory()){
                        for(int i = 0 ; i < count ; i++){
                            System.out.print("  ");
                        }
                        System.out.println("文件夹名:" + f.getName());
                        recursion(f,count + 1);
                    } else{for(int i = 0 ; i < count ; i++){
                                System.out.print("  ");
                            }
                            System.out.println("文件名:" + f.getName());
                    }
                }
            } else{
                System.out.println("该目录不存在!!!");
            }
        }

    结果:

    文件名:demo1.txt
    文件名:demo2.txt
    文件名:demo3.txt
    文件夹名:dir1
      文件夹名:dir11
        文件夹名:dir111
        文件名:dir111文本.txt
      文件名:dir11.java
      文件名:dir11文本.txt
      文件名:dir12文本.txt
    文件夹名:dir2
      文件名:dir21.java
      文件名:dir21文本.txt

    5.1 如上,如果我只想得到这个目录下所有以 .java 结尾的文件呢?

      可以在输出文件名之前进行判断:

            else{
                        String fileName = f.getName();
                        if(fileName.endsWith(".java")){
                            for(int i = 0 ; i < count ; i++){
                                System.out.print("  ");
                            }
                            System.out.println("文件名:" + fileName);
                        }
                    }

    结果:

    文件夹名:dir1
      文件夹名:dir11
        文件夹名:dir111
      文件名:dir11.java
    文件夹名:dir2
      文件名:dir21.java
    文件夹名:newDir
      文件夹名:newDir12

    除了以上方法,我们可以使用 listFiles()方法的两个重载方法 listFiles(FileFileter filter)、listFiles(FilenameFilter filter)。使用到两种过滤器。

    6.FileFilter过滤器、FilenameFilter 过滤器

    FileFilter过滤器:一个接口,没有实现类。需要我们自己写实现类,并实现accept()方法。 

      使用 FileFilter 过滤器,是我们使用到 File 类的 listFiles(FileFilter fileFilter) 方法时。

      

         FileFilter 实现类中 accept() 方法接收到,该目录下所有文件/文件夹,依次根据accept() 方法中定义的规则判断:符合,返回true; 不符合,返回false。而 dir.listFiles(FileFileter fileFilter)方法中接收到返回值:为true时,存入数组中,为false,不存入。

    根据 上述需求,我们可以创建FileFilterImpl类:

      FileFilter.java

    package com.xiaojian.basics.io.file;
    
    import java.io.File;
    import java.io.FileFilter;
    
    /**
     * FileFilter 过滤器的实现类
     */
    public class FileFilterImpl implements FileFilter {
        @Override
        public boolean accept(File pathname) {
            if(pathname.isDirectory()){
                return true;
            }
            return pathname.getName().endsWith(".java");
        }
    }

      或使用匿名内部类:

                File[] fileList = file.listFiles(new FileFilter(){
                    @Override
                    public boolean accept(File pathname) {
                        return pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java");
                    }
                });

      使用 lambda 表达式(接口中只有一个抽象方法) 

    File[] fileList = file.listFiles((pathname) -> pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".java"));

    FilenameFilter过滤器:大致相同

      其中 FilenameFilter 接口的 accept(File dir,String name) 方法中的参数,dir:表示当前使用listFiles方法的File类;name:表示当前遍历的文件/目录。

      使用匿名内部类

                File[] fileList = file.listFiles(new FilenameFilter(){
                    @Override
                    public boolean accept(File dir, String name) {
                        return new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java");
                    }
                });

      使用 lambda表达式(接口中只有一个抽象方法)

    File[] fileList = file.listFiles((dir,name) -> new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java"));
  • 相关阅读:
    鼠标单击事件( onclick )
    什么是事件《js》
    作业
    javaben的设计规则
    cookie的相关方法
    cookie 基本用法
    include 指令与动作区别
    简单的购物车应用案例 相关代码4
    简单的购物车应用案例 相关代码3
    iOS UI 布局
  • 原文地址:https://www.cnblogs.com/jr-xiaojian/p/12172241.html
Copyright © 2020-2023  润新知