Java 17 File 类的详解篇(java.io的file类是什么类)

createh51个月前 (02-01)技术教程16

Java 17 I/O 基础 File 篇

I/O(输入/输出)在任何的编程语言中该特性都是必不可少的知识点。 在 Java 中如何操作 I/O 呢。让我们来看一看。

首先对于 Java 来说 I/O 相关的操作都是来自 java.base 中 java.io 的包。

通常来说,通过数据流、序列化、以及文件系统来提供系统的输入和输出。

在 Java 中目前分为 2 个体系, 在 Java 1.7 开始提供了 java.nio 的包以及子包,提供了一系列全新的 API。

这些 API 是对原先的 IO 升级。因此很多使用者也称它为:NIO 2。使用这些接口更加容易且高效的访问操作输入、输出。

File

首先操作文件或者目录, 用到的一个文件目录操作类 File。 用来进行文件和目录路径名的抽象表示。

不管是在哪种操作系统中, 只要是有文件系统都会有对应的路径名称字符串。包含文件和目录。一般情况下关于路径的字符串有两个部分组成:

第一部分是可选的饿系统相关前缀字符串,例如 Windows 中的磁盘驱动器说明符,Unix 或者 Linux 的根目录 “/”。在抽象层次描述路径中的每个后续的名称都可以表示成一个目录,比如计算机名称为一个目录。通常情况下抽象的路径名转换成对应的字符串时,每个名称(目录)和下一个名称(目录或文件)中间都有一个由默认分隔符进行分隔,默认情况下使用 file.separator 定义。File 类中提供了对应的公共静态字段 separator 和 separatorChar。为什么要定义这个静态字段, 主要是因为不同的操作系统分隔符略有不同。为了保证程序的通用性,JVM 底层为我们优化了使用方法,不需要我们在写代码的时候再去判断系统的类型, 而写不同的代码。

对于路径而言, 会涉及两个路径相关的概念。

绝对路径相对路径 注意理解这两个概念的含义。在以后的开发中大量的使用该概念。

绝对路径: 不管怎么变化,都不会影响的路径。

相对路径: 相对当前目录而言,可以找到的路径, 但是层级变化会导致结果有影响。

举个例子:就定位我们的所在位置而言,某某省某某市某某县某某乡某某村余某某。这个名字就类似绝对路径,不管放到那这个余某某就是这个村的余某某。但是相对路径,就是相对而言,比方你现在在某某乡,你可以说找某某村的余某某。这样就可以找到, 但是你要到县里找某某村的余某某,就找不到了。因为缺少了乡这个单位。

或者

//绝对路径
D:\miaozi\java\hello.java
java\hello.java

通常情况下使用 “.” 来标识当前目录。我的知识体系里面是这样, 不知道有没有操作系统里面不使用 “.” 标识当前目录的。可以评论告诉我。

对于目录和文件会有不同的访问权限, 当没有权限访问某个目录和文件时会触发访问失败的异常。

File 的定义

public class File implements Serializable, Comparable

该类提供了 4 个公共的静态常量。

该类提供了 4 个构造函数。 分别如下图所示:

第一种方式:

File file1 = new File(new File("."), "File01.java");

第二种方式:

File file2 = new File("File01.java");

第三种方式:

File file3 = new File(".", "File01.java");

第四种方式:

File file4 = new File(new URI("file:///E:/Code/MzOpenSource/backend/javase17-tutorial/code/chapter17/file/File01java"));

完整的演示和运行效果:

这里直接使用 System.out 打印了对象信息, 显示的内容是对应的路径信息。可以通过对象的 toString() 进行重写。

这里只要指导 getPath() 是获得一个路径就好了。通常是将一个抽象路径名转换为路径名字符串。

需要注意的是, 针对 File 类只是对文件和目录的操作, 而不会涉及到内容。内容使用输出流和输入流进行操作。

对于目录和文件, 最基本的操作就是查看目录和文件,以及新增文件或目录,以及修改文件名,目录名等操作。

当然也会有一些判断方法,判断是否存在目录和文件。

该类的所有方法如下图所示:

canExecute()、anRead() 以及 canWrite() 方法分别代表的是, 是否有执行权限, 是否有读权限,是否有写权限。演示代码如下, 看下效果是否和你想的一致。

让我们来看看如何创建文件和目录

创建文件

创建文件的代码如下,创建一个 Test.java 文件:

先用 ls 命令查看当前目录文件信息。然后执行创建代码。

需要注意的是, 该创建必须保证创建的文件不存在, 如果文件已经存在就会创建失败。

也有两个静态方法可以直接创建文件。

运行效果如下:

其中输出的是文件创建所在目录。

创建目录

需要注意mkdir() 和 mkdirs() 的区别。mkdir 不能夸目录创建。例如: D:/test 目录存在, 创建 D:/test/t 就可以创建成功, 但是如果 D:/test/t/t2 就会创建失败。 如果不清楚目录中是否有不存在的目录, 可以使用 mkdirs 方法创建。

删除文件或目录

文件有创建就会有销毁,毕竟没有绝对的永恒。只有短暂的绽放。

目录也一样,毕竟诞生就是为了消亡。只不过怎么让消的过程更加有意义。

在当前目录创建一个 1.txt 的文件。

使用 delete 方法删除。 或者删除一个目录同样使用该方法。

File file = new File("Test");
System.out.println(file.delete());

如果删除的是一个目录, 必须保证目录中不能包含文件或者目录,只能是一个空目录。 否则将如法删除。

示例如下:

运行效果:

这里 Test 目录删除失败了。 因为该目录中还存放的有一个文件。

file = new File("Test/2.txt");
System.out.println(file.delete());

可以先删除该文件, 再删除 Test 即可 new File("Test").delete()。

重命名文件或者目录

除了操作的, 剩下的就是一些读取目录和文件的方法, 以及对应状态的方法。

举例如下:

还有一些文件和目录相关的磁盘或者分区的查询。

当然了, 既然有分区, 和目录就有目录的内容查询。 针对文件和目录的查询都是以 list 开头的方法。

其中有一个静态的返回 File 数组的一个方法。 listRoots() 列出文件系统可用的根目录。

File[] files = File.listRoots();
for (File file : files) {
    System.out.println(file);
}

然后有两种形式的查询目录和文件的方式,一是返回字符串, 二是返回一个 File 数组, 并且两种都会有一个正常模式和过滤器模式。

先看看返回字符串的方式。

这里因为 FilenameFilter 是一个 @FunctionalInterface 函数式接口,所以使用 Lambda 表达式。当然也可以使用接口实现的方式。查看 list(FilenameFilter filter) 的源码就可以看到过滤的方式。先获得所有的目录和文件, 然后再进行处理。最后返回对应的符合过滤器规则的路径。

当然也可以直接使用返回 File 数组对象的方式。 使用方式和上面类似,只是返回值发生了变化。

对于 File 数组, 提供了一个单独的过滤方法。 代码如下, 通过 File 对象进行处理过滤。

关于读取和写入权限, 下一章进行文件内容读取的时候进行演示。这篇文章内容不少。 但是知识点没有难点。

希望对你有所帮助。感谢您的阅读。

关注, 收藏, 点赞。

相关文章

java读写xml文件(java读取xml工具类)

1.读取xml文件文件格式如下: 张无忌 男 光明顶 minmin 3 4...

java进行后台数据写入word模板再进行压缩包下载

经常会遇到这样需求,写一个导出功能,进行word模板格式进行导出,数据库相应数据回填到word模板中,再对这个模板进行导出功能。如果一次性需要导出多个模板情况下,就要对多个进行压缩成一个压缩包再一次性...

java实现文件上传到服务器(java实现文件上传的三种方式)

java实现文件上传到服务器,java实现大文件上传,java实现大文件分块上传,java实现大文件分片上传,java实现大文件切片上传,java实现大文件批量上传,java实现大文件加密上传,jav...

Java操作Office:POI之word生成(java生成doc文档)

程序员架构进阶一 背景 最近在项目开发中,有数据导出到word的需求。这就涉及代码生成word文档的操作,且有格式要求。大家用word做过简历的都有了解,做简历时,会使用表格、图片、文字等元素。而且表...

「Java进阶」I/O操作必备知识点:字节流读写实例讲解

序欢迎来到全网最完整的Java进阶知识系列教程!!!每天定时更新!!!本期的课程,我们继续分享I/O文件读写。IO文件读写,根据数据格式不同,分为字节流读写和字符流读写,我们今天先讲字节流读写。如果你...

Java原生代码实现爬虫(爬取小说)(java开源爬虫平台)

Java也能做爬虫。现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择,Java成熟的爬虫框架很多,下面给大家展示一个使用Java基础语言编写的爬取小说的案例:实现功能...