10.1 File类

news2025/1/10 2:07:51

 

 前言:

java.io包中的File类是唯一一个可以代表磁盘文件的对象,它定义了一些用于操作文件的方法。通过调用File类提供的各种方法,可以创建、删除或者重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间,等等。本节将针对File类进行详细讲解。

 10.1.1 创建File对象

我的笔记:

File类的构造方法

`java.io.File` 类提供了几个构造方法,常用的有:

方法声明功能描述
File(String pathname) 通过指定的一个字符串类型的文件路径创建一个File对象
File(String parent, String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
File(File parent, String child)根据指定的一个File类的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象

这些构造方法允许您使用字符串路径或者 `File` 对象和子路径字符串来创建 `File` 对象。在这些方法中,您需要传入文件路径。

例子

以下是一个简单的示例代码,演示如何使用 `File` 类的构造方法创建 `File` 对象。

import java.io.File;

public class Example01 {
    public static void main(String[] args) {
        File f = new File("D:\\file\\a.txt");  //使用绝对路径创建File对象
        File f1 = new File("src\\Hello.java"); //使用相对路径创建File对象
        
        System.out.println(f);
        System.out.println(f1);
    }
}

在这个例子中,`f` 是通过绝对路径创建的 `File` 对象,而 `f1` 是通过相对路径创建的。 

注意事项

在Windows中,目录的路径分隔符是反斜线 `\`,但在Java字符串中,`\` 是一个转义字符,所以要写成 `\\`。也可以使用正斜线 `/` 作为路径分隔符,例如 "D:/file/a.txt"。

总结

在这一节中,我们学习了如何使用 `java.io.File` 类的构造方法创建 `File` 对象。这些构造方法允许我们使用不同的方式(绝对路径、相对路径、父路径+子路径)来创建 `File` 对象,非常灵活。同时,我们也注意到了在路径字符串中要正确使用路径分隔符。

 10.1.2 File类常用的方法

`java.io.File` 类具有一系列的方法,可以用来操作文件和目录。以下是一些常用方法的概览和描述。

#### 常用方法

1. **exists()**
   - 返回类型:`boolean`
   - 描述:判断File对象指向的文件或目录是否存在。若存在则返回`true`,否则返回`false`。

2. **delete()**
   - 返回类型:`boolean`
   - 描述:删除File对象指向的文件或目录。若删除成功则返回`true`,否则返回`false`。

3. **createNewFile()**
   - 返回类型:`boolean`
   - 描述:当File对象指向的文件不存在时,该方法将尝试创建一个新文件。若创建成功则返回`true`,否则返回`false`。

4. **getName()**
   - 返回类型:`String`
   - 描述:返回File对象指向的文件或目录的名称。

5. **getPath() 和 getAbsolutePath()**
   - 返回类型:`String`
   - 描述:`getPath()` 返回File对象指向的路径,而 `getAbsolutePath()` 返回File对象指向的绝对路径。

6. **getParentFile()**
   - 返回类型:`String`
   - 描述:返回File对象指向的文件或目录的父目录。

7. **canRead() 和 canWrite()**
   - 返回类型:`boolean`
   - 描述:判断File对象指向的文件或目录是否可读/可写。若是则返回`true`,否则返回`false`。

8. **isFile() 和 isDirectory()**
   - 返回类型:`boolean`
   - 描述:判断File对象指向的是否是文件或目录。若是则返回`true`,否则返回`false`。

9. **isAbsolute()**
   - 返回类型:`boolean`
   - 描述:判断File对象指向的文件或目录的路径是否是绝对路径。

10. **lastModified()**
    - 返回类型:`long`
    - 描述:返回文件最后修改时间的毫秒值,从1970年1月1日0时0分0秒算起。

11. **length()**
    - 返回类型:`long`
    - 描述:返回文件的长度,单位是字节。

12. **list() 和 listFiles()**
    - 返回类型:`String[]` 和 `File[]`
    - 描述:`list()` 递归列出指定目录的全部内容(包括子目录与文件)的名称,`listFiles()` 返回一个包含File对象所有子文件和子目录的File数组。

#### 例子

import java.io.File;

public class Example02 {
    public static void main(String[] args) {
        File file = new File("src/test.txt");
        
        System.out.println("文件是否存在:" + file.exists());
        System.out.println("文件名:" + file.getName());
        System.out.println("文件大小:" + file.length() + " bytes");
        System.out.println("文件相对路径:" + file.getPath());
        System.out.println("文件绝对路径:" + file.getAbsolutePath());
        System.out.println("文件的父级对象是否为文件:" + file.isFile());
        System.out.println("文件删除是否成功:" + file.delete());
    }
}

#### 特别的方法

1. **createTempFile() 和 deleteOnExit()**
   - 描述:`createTempFile()` 用于创建一个临时文件。`deleteOnExit()` 方法在Java虚拟机退出时自动删除临时文件。

import java.io.File;
import java.io.IOException;

public class Example03 {
    public static void main(String[] args) throws IOException {
        File f = File.createTempFile("itcast-", ".txt");
        f.deleteOnExit(); // Java虚拟机退出时自动删除文件
        System.out.println("f是否为文件:" + f.isFile());
        System.out.println("f的相对路径:" + f.getPath());
    }
}

#### 注意事项和小技巧

- 在使用 `delete()` 方法删除文件或目录前,务必先使用 `exists()` 方法检查其是否存在。
- 使用 `createNewFile()` 创建新文件时,要处理可能抛出的 `IOException` 异常。
- 利用 `createTempFile()` 和 `deleteOnExit()` 可以方便地管理临时文件,无需手动删除。

 

10.1.3 遍历目录下的文件

我的笔记:

遍历目录

`java.io.File` 类提供了 `list()` 方法,该方法可以返回一个目录下所有文件和目录的名称字符串数组。结合这些名称,你可以遍历指定目录下的所有文件。

1. 遍历指定目录下的所有文件

这是最基础的遍历方式,以下是一个简单的实例演示:

import java.io.File;

public class Example04 {
    public static void main(String[] args) {
        File file = new File("D:\\javase03");
        
        if(file.isDirectory()) {
            String[] names = file.list();
            for (String name : names) {
                System.out.println(name);
            }
        }
    }
}

在这个示例中,我们创建了一个指向 "D:\\javase03" 目录的 `File` 对象。我们通过调用 `isDirectory()` 方法判断这个路径是否指向一个存在的目录。如果是,我们就调用 `list()` 方法来获取该目录下所有文件和子目录的名称,并依次打印它们。

注意事项

- **检查目录存在性**:
  在调用 `list()` 方法之前,通过 `isDirectory()` 方法检查指定路径是否是一个存在的目录是很重要的,因为 `list()` 方法在路径不是一个目录或者目录不存在时会返回 null。

- **遍历子目录**:
  如果需要遍历包括子目录中的文件在内的所有文件,需要递归地处理每个子目录。

笔记总结

- `java.io.File` 类中的 `list()` 方法可以用于获取一个目录下所有文件和目录的名称。
- 在调用 `list()` 方法之前,应该使用 `isDirectory()` 方法检查路径是否指向一个存在的目录。
- 可以使用三种不同的方式进行遍历:遍历指定目录下的所有文件,遍历指定目录下具有指定扩展名的文件,以及遍历包括子目录中的文件在内的所有文件。
- 对于需要深度遍历子目录的场景,需要递归地处理每个子目录。

 10.1.4 删除文件及目录

#### 目标:

- 学习如何使用Java中的File类的delete()方法来删除文件或目录。
- 理解如何递归地删除非空目录。

#### 关键概念:

1. **File类的delete()方法:**
   - **作用:** 用于删除由File对象表示的文件或目录。
   - **返回值:** 如果成功删除则返回true,否则返回false。

2. **非空目录的删除:**
   - **概述:** File类的delete()方法无法直接删除包含文件或子目录的目录。
   - **解决方法:** 需要递归地删除目录中的所有子目录和文件。

#### 示例代码:

##### 删除文件或空目录

import java.io.*;
public class Example07 {
    public static void main(String[] args) {
        File file = new File("D:\\hello");
        if (file.exists()) {
            System.out.println(file.delete()); // 如果hello目录是空的,将会被删除并返回true。
        }
    }
}

##### 递归删除非空目录

import java.io.*;
public class Example08 {
    public static void main(String[] args) {
        File file = new File("D:\\hello");
        deleteDir(file);
        System.out.println("删除成功!");
    }
    
    public static void deleteDir(File dir) {
        if (dir.exists()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    deleteDir(file);
                } else {
                    file.delete();
                }
            }
        }
        dir.delete(); // 最后删除原始目录
    }
}

笔记总结:

1. **基础操作:**
   - 使用`delete()`方法可以删除文件或空目录。
   - 如果尝试删除非空目录,`delete()`方法将返回false,表示删除失败。

2. **递归删除:**
   - 要删除非空目录,需要递归地遍历并删除所有子目录和文件。
   - 示例代码Example08演示了如何实现这一操作,首先检查目录是否存在,然后获取目录中的所有文件和子目录,并对每一个进行检查。如果是目录,就递归调用`deleteDir`方法;如果是文件,就直接删除。最后,删除原始目录。

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP的请求方法,空行,body,介绍请求报头的内部以及粘包问题

目录 一、GET与POST简介 二、空行和body 三、初识请求报头以及粘包问题 四、认识请求报头剩余部分 一、GET与POST简介 GET https://www.sogou.com/HTTP/1.1 请求报文中的方法,是最常规的方法(获取资源) POST:传输实体主体的方法…

MACH架构的质量工程指南

MACH是快速创建高质量应用的最佳实践,同时也意味着有助于团队内的质量工程。本文介绍了MACH在质量工程领域所起的作用,并介绍了成功的MACH架构必备的8个要素。原文: MACH Architecture: The Quality Engineering Guide MACH和质量工程有关。 在过去几年里…

点餐小程序实战教程02用户注册

按照我们的需求分析,本篇开始我们进入到具体的开发部分。低代码开发的基础是先创建数据源,我们本篇介绍用户注册功能,先需要创建一个用于存放用户信息的数据源。 1 用户分类 未使用过低代码工具的初学者,可能对低代码的用户分类…

集合-ArrayList源码分析(面试)

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 目录 系列文章目录 前言 一 . 什么是ArrayList? 二 . ArrayList集合底层原理 总结 前言 大家好,今天给大家讲一下Arra…

【LeetCode热题100】--94.二叉树的中序遍历

94.二叉树的中序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {…

Ubuntu安装zsh之后搜狗起不来

1. 问题描述 装了Ubuntu22.04后,先装了搜狗,再装了zsh,装完zsh之后发现搜狗起不来了,重装搜狗和fcitx之后还是起不来,在此记录解决过程。 2. 解决方法 参考博客: 配置zsh后,无法通过 DBus 连接到 Fcitx,…

2023年中国劳保用镜市场规模现状及行业需求前景分析[图]

眼睛对人体的重要性可谓不言而喻。同时,眼睛也是很脆弱的人体器官。特别是在生产过程中,由于异物、有毒气体等侵害,眼睛就很容易受伤,随着现代工业的发展,劳保镜已成为一种必不可少的工具,它不仅可以保护工…

ARTS 打卡 第四周,游刃有余

引言 时间过得好快,已经到了第四周学习打卡环节,也是本次活动的最后一周。认识三掌柜的想必都知道,我持续创作技术博客已经有6年时间了,固定每个月发布不少于6篇博文。同时,自己作为一名热爱分享的开发者,像…

jmh的OperationsPerInvocation参数

背景 最近再看fllink的性能基准测试时,发现它使用了OperationsPerInvocation注解,本文就来记录下这个注解的含义 官方解释 从官方文档:http://javadox.com/org.openjdk.jmh/jmh-core/0.9/org/openjdk/jmh/annotations/OperationsPerInvoca…

1.4.C++项目:仿muduo库实现并发服务器之buffer模块的设计

项目完整版在: 一、buffer模块: 缓冲区模块 Buffer模块是一个缓冲区模块,用于实现通信中用户态的接收缓冲区和发送缓冲区功能。 二、提供的功能 存储数据,取出数据 三、实现思想 1.实现换出去得有一块内存空间,采…

预编译(3)

目录 命名约定: #undef 命令行定义 条件编译 常见的条件编译指令 头⽂件的包含 头⽂件被包含的⽅式: 本地⽂件包含 库⽂件包含 嵌套文件包含 命名约定: 一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者那我们平…

代码随想录-哈希表|ACM模式

目录 前言: (1)基本概念 (2)常见的三种哈希结构 242.有效字母的异位词 题目描述: 输入输出描述: 思路和想法: 349. 两个数组的交集 题目描述: 输入输出描述: …

Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!

iZotope RX 10是一款由iZotope公司开发的音频修复和编辑软件。它被广泛用于电影、电视、音乐和游戏等行业的音频后期制作,以及声音设计和修复工作。 在RX 10中,iZotope从头开始重新设计了全新的Repair Assistant修复助手,并且推出了相应的修…

嵌入式学习笔记(40)看门狗定时器

7.5.1什么是看门狗、有何用 (1)看门狗定时器和普通定时器并无本质区别。定时器可以设定一个时间,在这个时间完成之前定时器不断计时,时间到的时候定时器会复位CPU(重启系统)。 (2)系统正常工作的时候当然不希望被重启&#xff0…

【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(protobuf.js)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…

vSAN7.0更换硬盘步骤

更换容量盘 预先检查 查看故障硬盘 清单->集群->监控->vsan->skyline运行->物理磁盘->运维运行状况 检查数据同步状态 清单->集群->监控->vsan->重新同步对象,数值全为0表示未重建。 数据迁移检查 清单->集群->监控->…

推荐算法——Apriori算法原理

0、前言: 首先名字别读错:an pu ruo ao rui 【拼音发音】Apriori是一种推荐算法推荐系统:从海量数据中,帮助用户进行信息的过滤和选择。主要推荐方法有:基于内容的推荐、协同过滤推荐、基于关联规则的推荐、基于知识的…

八大排序源码(含优化)

文章目录 1、直接插入排序2、希尔排序3、选择排序4、冒泡排序5、堆排序6、快速排序快速排序递归实现霍尔法挖坑法前后指针法快速排序小区间优化 快速排序非递归实现 7、归并排序归并排序递归实现归并排序非递归 8、计数排序 大家好,我是纪宁,这篇文章是关…

36.骑士周游算法及其基于贪心算法的优化

概述 骑士周游算法,叫做“马踏棋盘算法”或许更加直观。在国际象棋8x8的棋盘中,马也是走“日字”进行移动,相应的产生了一个问题:“如果要求马 在每个方格只能进入一次,走遍全部的64个方格需要如何行进?”…

【STM32基础 CubeMX】按键的检测

文章目录 前言一、按键原理图分析二、cubeMX配置key GPIO三、代码分析3.1 cubemx生成的代码3.2 1个库函数 四、按键点灯示例代码总结 前言 在嵌入式系统开发中,按键检测是一个基础而重要的任务,特别是在使用STM32系列微控制器的项目中。按键通常被用于与…