File类

File类的作用

File类是Java中用于表示文件和目录的抽象类。它提供了一组用于操作文件和目录的方法。File类可以用于创建、删除、重命名、检查文件和目录的存在性、获取文件和目录的属性等操作。

File类的主要作用包括:

  1. 创建文件和目录:可以使用File类创建新的文件或目录。通过调用File类的构造方法,可以指定文件或目录的路径和名称。
  2. 操作文件和目录:File类提供了一系列方法用于操作文件和目录,例如复制文件、移动文件、删除文件、创建目录等。
  3. 文件和目录的属性获取:可以使用File类获取文件和目录的各种属性,如文件名、路径、大小、修改时间等。
  4. 文件和目录的遍历:File类提供了方法来遍历目录中的文件和子目录,可以获取目录下的所有文件和子目录的列表。
  5. 文件和目录的判断:可以使用File类来判断文件和目录是否存在、是否可读、是否可写等。

需要注意的是,File类只表示文件路径的抽象,它并不表示文件内容的操作。如果需要对文件内容进行读写操作,可以使用其他类,如InputStream、OutputStream、Reader、Writer等。

在Java的新版本中,推荐使用Path类和Files类来代替File类进行文件和目录的操作,因为Path类和Files类提供了更多的功能和更简洁的API。

File类的使用

//指定路径给文件
String path = "D:\\io";
 File file = new File(path);
// 创建目录
boolean created = file.mkdir();
// 创建多级目录
boolean createdAll = file.mkdirs();
// 检查文件或目录是否存在
boolean exists = file.exists();
// 检查是否为目录
boolean isDirectory = file.isDirectory();
// 检查是否为文件
boolean isFile = file.isFile();
// 获取文件或目录的名称
String name = file.getName();
// 获取文件或目录的绝对路径
String absolutePath = file.getAbsolutePath();
// 删除文件或目录
boolean deleted = file.delete();
// 重命名文件或目录
File newFile = new File("D:\\new_io");
boolean renamed = file.renameTo(newFile);
// 获取文件大小
long size = file.length();
// 获取文件最后修改时间
long lastModified = file.lastModified();
下面是一些常见的File类的使用示例:

2.创建文件或目录:

File file = new File("path/to/file.txt");
boolean created = file.createNewFile(); // 创建文件

File dir = new File("path/to/directory");
boolean created = dir.mkdir(); // 创建目录

2.检查文件或目录的存在性:

File file = new File("path/to/file.txt");
boolean exists = file.exists(); // 检查文件是否存在

File dir = new File("path/to/directory");
boolean exists = dir.exists(); // 检查目录是否存在

3.获取文件或目录的属性:

File file = new File("path/to/file.txt");
String name = file.getName(); // 获取文件名
String path = file.getAbsolutePath(); // 获取绝对路径
boolean isDirectory = file.isDirectory(); // 检查是否为目录
boolean isFile = file.isFile(); // 检查是否为文件
long size = file.length(); // 获取文件大小(字节数)
long lastModified = file.lastModified(); // 获取最后修改时间(毫秒数)

4.遍历目录中的文件和子目录:

File dir = new File("path/to/directory");
File[] files = dir.listFiles(); // 获取目录中的所有文件和子目录

for (File file : files) {
    if (file.isDirectory()) {
        // 处理子目录
    } else {
        // 处理文件
    }
}

5.删除文件或目录:(删除文件夹时必须保证文件夹为空,否则将删除失败

File file = new File("path/to/file.txt");
boolean deleted = file.delete(); // 删除文件

File dir = new File("path/to/directory");
boolean deleted = dir.delete(); // 删除目录(只能删除空目录)
注意:

//绝对路径:带有盘符的路径称之为绝对路径 //相对路径:不带盘符的路径称之为相对路径,相对路径相对于当前工程来定位的。

递归

概念

递归是一种在方法内部调用自身的编程技巧。在处理文件和目录的操作中,递归可以用于遍历目录树、搜索文件、计算目录大小等需要对目录及其子目录进行递归处理的情况。

在方法内部再调用自身就是递归。递归分为直接递归和间接递归。

直接递归就是方法自己调用自己。

间接递归就是多个方法之间相互调用,形成一个闭环,从而构成递归。

使用递归时必须要有出口,也就是使递归停下来。否则,将导致栈内存溢出。j就是死循环

下面是几个对file文件的操作示例:

列举出一个文件夹中所有的*.class**文件*

private static void findClass(File folder){
        FileFilter filter = new FileFilter() {
            @Override
            public boolean accept(File f) {
                return f.getName().endsWith(".class") || f.isDirectory() ;
            }
        };
        //使用文件过滤器来过滤文件。满足条件的才会在数组中出现
        File[] files = folder.listFiles();
        if(files != null){
            for (File file:files) {
                if(file.isDirectory()){
                    findClass(file);//递归:调用自身,就必须有出口
                }else{
                    System.out.println(file.getPath());//出口
                }
            }
        }
    }

删除文件夹

private  static void deleteFolder(File folder){
        File[] files = folder.listFiles();
        //这里一定要验证files数组是否为null
        if(files != null){
            for (File f:files) {
                if(f.isDirectory()){//是目录
                    deleteFolder(f);//是目录,就在调用方法删除文件夹,形成递归删除
                }else{
                    f.delete();//不是目录就直接删除
                }
            }
        }
        folder.delete();//还需要删除文件夹下面的文件夹
    }

扫描文件夹

private static void scanFolder(File folder){
        //文件夹里面存在子文件,这些子文件可能是文件,也可能是文件夹
        //得到文件夹下下一级子文件(包含文件和文件夹)
        File[] files = folder.listFiles();
        //这里一定要校验files数组是否为null
        if (files != null) {
            for (File f:files) {
               if(f.isDirectory()){//是目录
                   scanFolder(f);//自己调用自己就称为递归
               } else {
                   System.out.println(f.getPath());
               }
            }
        }
    }