File

java.io.File: 是文件目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。(文件和文件夹)

File类的静态成员变量:

static String pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。
static char pathSeparatorChar 与系统相关的路径分隔符。
static String separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
static char separatorChar 与系统相关的默认名称分隔符。

System.out.println(File.separator);//  文件名称分隔符 windows:反斜杠 \ linux:正斜杠 /
System.out.println(File.pathSeparator);// 路径分隔符 windows:分号 ; linux:冒号 :

 注意:

  1. 路径是不区分大小写
  2. 路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠  \\

File的构造方法:

public File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。不管传入的pathName是否存在都能创建成功。

public File(File parent,String child)从父抽象路径名和子路径名字符串创建新的File实例。

public File(String parent,String child)从父路径名字符串和子路径名字符串创建新的File实例。 

    public static void main(String[] args) {
        //方式1:
        File file = new File("C:\\0_Joyce\\Eclipse");
        System.out.println(file);//C:\0_Joyce\Eclipse
        //方式2:
        File file1 = new File("C:\\0_Joyce\\Eclipse","a.txt");
        System.out.println(file1);//C:\0_Joyce\Eclipse\a.txt        
        //方式3:
        File file2 = new File(file,"b.txt");
        System.out.println(file2);
    }    

File类的获取功能的方法

public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 

public String getPath() 将此抽象路径名转换为路径名字符串   File类中的toString()方法就是调用的getPath()方法。

public String getName()返回由此抽象路径名表示的文件或目录的名称

public long length()返回由此抽象路径名表示的文件的长度。如果是文件夹或者是不存在的文件,则返回0,得到的是字节数;

File类的判断功能方法:

public boolean exists()测试此抽象路径名表示的文件或目录是否存在。
public boolean isDirectory()测试此抽象路径名表示的文件是否为目录
public boolean isFile()测试此抽象路径名表示的文件是否为普通文件。

File类中创建删除功能方法:

public boolean createNewFile() throws IOException当且仅当具有该名称的文件尚不存在时

public boolean delete()删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。 

public boolean mkdir()创建由此抽象路径名命名的目录。
public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。

 

 File类遍历文件夹(目录)的功能:

public String[] list()返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。返回当前路径下的所有的文件夹和文件

 

 递归找到指定目录下的所有的文件和文件夹:

    public static void main(String[] args) {
        File file = new File("C:\\0_Joyce\\Eclipse\\Test");
        getFile(file);        
    }
    
    public static void getFile(File file) {
        System.out.println(file.getPath());
        //获取到目录下的所有的文件或者文件夹
        File[] files = file.listFiles();
        for(File value:files) {
            //如果还是一个文件夹,继续遍历
            if(value.isDirectory()) {
                getFile(value);
            }else {
                if(value.getName().toLowerCase().endsWith(".java")) {
                    System.out.println(value.getName());
                }                
            }
        }
    }

public File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 该方法的行为与listFiles()方法的行为相同,但返回的数组中的路径名必须满足过滤器。 如果给定的filter是null那么所有的路径名都被接受。 否则,当且仅当值true在路径名上调用过滤器的FileFilter.accept(File)方法时,路径名满足过滤器。

FileFilter 也是一个函数式接口,里面有一个方法叫做accept:

boolean accept(File pathname)
测试指定的抽象路径名是否应包含在路径名列表中。

FileFilter的使用原理:

使用FileFilter接口:

public static void main(String[] args) {
        File file = new File("C:\\0_Joyce\\Eclipse\\Test");
        getFile(file);        
    }
    
    public static void getFile(File file) {
        //方式一:内部匿名类
//        File[] files = file.listFiles(new FileFilter() {
//            @Override
//            public boolean accept(File pathname) {                
//                return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
//            }            
//        });
        //方式二:Lambda 表达式
//        File[] files = file.listFiles((File pathname)->{
//            return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java");
//        });
        //方式三: 简便的Lambda表达式
        File[] files = file.listFiles(pathname->pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".java"));
        for(File value:files) {
            if(value.isDirectory()) {
                getFile(value);
            }else {
                if(value.getName().toLowerCase().endsWith(".java")) {
                    System.out.println(value.getName());
                }                
            }
        }
    }

使用FilenameFilter接口:

public static void main(String[] args) {
        File file = new File("C:\\0_Joyce\\Eclipse\\Test");
        getFile(file);        
    }
    

    public static void getFile(File file) {
        //方式一:内部匿名类
//        File[] files = file.listFiles(new FilenameFilter() {
//            @Override
//            public boolean accept(File dir, String name) {
//                return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
//            }
//        });
        //方式二:Lambda表达式
        File[] files = file.listFiles((File dir, String name)->{
            return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
        });
        //方式三:简约的Lambda 表达式
        //File[] files = file.listFiles((dir,name)-> new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java"));

        for(File value:files) {
            if(value.isDirectory()) {
                getFile(value);
            }else {
                if(value.getName().toLowerCase().endsWith(".java")) {
                    System.out.println(value.getName());
                }                
            }
        }
    }

 

posted @ 2020-11-11 17:04  Joyce502  阅读(517)  评论(0)    收藏  举报