Java 文件操作-File


File对象主要是用来表示文件或者是目录的路径的。类中提供了很多对文件或者文件夹操作的常用方法。

创建File对象的方式

  • 绝对路径
    以磁盘名开头的路径。例如:C:\Windows
  • 相对路径
    不是以盘符开头的,相对于当前项目下的路径。例如: a.txt
File(String pathname) //通过字符串类型的路径来创建对象
File(String parent, String child) //通过父目录的路径(字符串类型)和文件(文件夹)名称来创建对象
File(File parent, String child)//通过父目录的路径(File类型)和文件(文件夹)名称来创建对象

常用方法

创建文件夹与文件

boolean createNewFile()//根据路径创建一个文件,返回值代表创建是否成功
boolean mkdir() //根据路径创建一个文件夹,返回值代表创建是否成功
boolean mkdirs() //根据路径创建一个文件夹,如果父目录不存在会自动创建父目录

三者的区别:

  • createNewFile() 只能创建文件 而其他两个只能创建目录。
File file1 = new File("E:\\Test\\a");
File file2 = new File("E:\\Test\\b.txt");
File file3 = new File("E:\\Test\\c.txt");
file1.createNewFile();
file2.mkdir();
file3.mkdirs();

在这里插入图片描述

  • createNewFile()mkdir() 不会自动创建父目录。如果指定路径中的父目录不存在,它将无法创建文件\目录。
  • mkdirs()与前两者不同,mkdirs() 会自动创建任何缺失的父目录,如果父目录不存在的话。这是它与其他两种方法的主要区别。
  • 如果目录或文件存在都会创建失败
  • 权限不足会抛出异常
    在这里插入图片描述

判断

boolean exists() //判断文件或者文件夹是否存在
boolean isFile() //判断是否是一个文件
boolean isDirectory() //判断是否是一个文件夹

删除

boolean delete() //删除文件,或者删除空文件夹,返回值代表删除是否成功

获取信息

long length() //获取一个文件的大小,对文件夹无意义

String getName()//获取文件或文件夹的名字
File getParentFile() //获取父目录的File对象
String getAbsolutePath()//获取File对象的绝对路径  
// 重要
File[] listFiles() //如果当前File对象是一个文件夹,可以获取文件夹下的所有文件或者文件夹的File对象。

重要方法

File[] listFiles() //如果当前File对象是一个文件夹,可以获取文件夹下的所有文件或者文件夹的File对象。

File[] listFiles() 是 Java 中 File 类的一个重要方法,它用于获取指定目录中的所有文件和子目录,并返回一个包含它们的 File 对象数组。这个方法在文件操作中非常有用,因为它允许你遍历目录内容,执行各种文件操作,如复制、移动、删除等。

以下是 File[] listFiles() 方法的一些重要用途和优点:

  1. 目录内容遍历:通过调用 listFiles() 方法,你可以轻松地获取目录中的所有文件和子目录的引用,从而可以递归遍历目录内容,查找特定类型的文件,或执行其他文件操作。

  2. 文件操作:你可以使用 listFiles() 结合其他文件操作方法来执行复杂的文件操作,如批量复制、移动、删除、重命名文件,以及在文件夹中搜索文件等。

  3. 目录信息获取:通过遍历目录的内容,你可以获得目录内文件和子目录的信息,如文件名、大小、创建时间、最后修改时间等。

  4. 批量处理:当你需要批量处理一组文件或子目录时,listFiles() 提供了一种方便的方式,使你能够针对目录中的所有项目执行相同的操作。

  5. 文件筛选:你可以使用 listFiles() 结合过滤器来筛选出特定类型的文件或目录,以满足你的需求。

示例用法:

File directory = new File("E:\\my_directory");
File[] files = directory.listFiles();
if (files != null) {
    for (File file : files) {
        if (file.isFile()) {
            System.out.println("文件: " + file.getName());
        } else if (file.isDirectory()) {
            System.out.println("目录: " + file.getName());
        }
    }
}

File[] listFiles() 方法是处理文件和目录的基本工具之一,它能够有效地管理和操作文件系统中的内容。

使用listFiles()实现深度\广度优先遍历文件目录

深度优先遍历

深度优先遍历(DFS):

  • DFS从起始节点(通常是根节点)开始遍历,然后沿着一条路径尽可能深入地访问节点,直到不能再深入为止。
  • 当无法再深入时,回溯到上一个未访问过的节点,并尝试遍历它的其他分支。
  • 使用栈(Stack)数据结构来实现DFS,通常递归也是一种实现DFS的方式。
  • DFS适合解决深度相关的问题,如查找路径、拓扑排序等。
    public void Search(){
        File file = new File("E:\\Test");
        DFS(file);
    }

    private void DFS(File file){
        if (file.isDirectory()){
            // 获取File对象的绝对路径
            System.out.println("目录: " + file.getAbsolutePath());
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    DFS(f);
                }
            }
        }else {
            System.out.println("文件: " + file.getAbsolutePath());
        }
    }

在这里插入图片描述

广度优先遍历

广度优先遍历(BFS):

  • BFS从起始节点开始,首先访问所有与起始节点直接相邻的节点,然后依次访问它们的邻居节点。
  • BFS使用队列(Queue)数据结构来实现,确保先访问所有距离起始节点相同的节点,然后再移向距离更远的节点。
  • BFS适合用于查找最短路径或最短步骤的问题,因为它首先访问离起点最近的节点。
    public void Search(){
        File file = new File("E:\\Test");
        BFS(file);
    }
    private void BFS(File file){
        Queue<File> queue = new LinkedList<>();
        queue.add(file);
        while (!queue.isEmpty()){
            File poll = queue.poll();
            if (poll.isDirectory()){
                System.out.println("目录: " + poll.getAbsolutePath());
                if (poll.isDirectory()) {
                    File[] files = poll.listFiles();
                    if (files != null) {
                        for (File f : files) {
                            queue.add(f);
                        }
                    }
                }
            }else {
                System.out.println("文件: " + poll.getAbsolutePath());
            }
        }
    }

在这里插入图片描述
不管是广度还是深度优先遍历都需要listFiles()可见其重要性。

删除指定目录的全部文件

前面我们说delete()只能删除文件或者空目录,使用深度优先遍历就可以实现删除指定目录的全部文件。

  • 如果是文件直接删除
  • 是空目录直接删除
  • 不是空目录继续深度遍历
  • 删除非空目录的文件或空目录使其成为空目录

    public void deleteAll(File file) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            if (files != null) {
                for (File f : files) {
                    deleteAll(f);
                }
            }
        }
        System.out.println("删除:" + file.getAbsolutePath());
        file.delete();
    }

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
文件类是Java中用于处理文件和目录的类。它提供了一系列的方法来创建、删除、重命名、复制、移动、获取文件属性等操作。 可以使用以下步骤来创建一个文件对象: 1. 导入java.io包。 2. 使用File类的构造函数创建一个文件对象,可以传入文件路径、文件名等信息。 例如: ```java import java.io.File; public class FileDemo { public static void main(String[] args) { // 创建一个File对象 File file = new File("C:/test.txt"); } } ``` 在这个例子中,我们创建了一个名为test.txt的文件对象,并且指定了它的路径为C:/。 接下来,我们可以使用File类的方法来进行一些操作,例如: 1. 创建一个新文件 我们可以使用File类的createNewFile()方法来创建一个新文件。例如: ```java File file = new File("C:/test.txt"); if (file.createNewFile()) { System.out.println("File created successfully!"); } else { System.out.println("File already exists."); } ``` 在这个例子中,我们使用createNewFile()方法创建了一个新文件。如果文件创建成功,它会返回true,否则返回false。 2. 删除一个文件 我们可以使用delete()方法来删除一个文件。例如: ```java File file = new File("C:/test.txt"); if (file.delete()) { System.out.println("File deleted successfully!"); } else { System.out.println("Failed to delete file."); } ``` 在这个例子中,我们使用delete()方法删除了一个文件。如果删除成功,它会返回true,否则返回false。 3. 重命名一个文件 我们可以使用renameTo()方法来重命名一个文件。例如: ```java File file = new File("C:/test.txt"); File newFile = new File("C:/newfile.txt"); if (file.renameTo(newFile)) { System.out.println("File renamed successfully!"); } else { System.out.println("Failed to rename file."); } ``` 在这个例子中,我们使用renameTo()方法将一个文件从test.txt重命名为newfile.txt。如果重命名成功,它会返回true,否则返回false。 4. 获取文件属性 我们可以使用File类的一些方法来获取文件的属性,例如文件名、文件大小、文件最后修改时间等。例如: ```java File file = new File("C:/test.txt"); System.out.println("File name: " + file.getName()); System.out.println("File size: " + file.length()); System.out.println("Last modified: " + new Date(file.lastModified())); ``` 在这个例子中,我们使用getName()方法获取文件名,length()方法获取文件大小,lastModified()方法获取文件最后修改时间。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值