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

createh55个月前 (02-01)技术教程74

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 对象进行处理过滤。

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

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

关注, 收藏, 点赞。

相关文章

Android 读写文件(安卓开发读写文件)

Android使用一个非常类似与其他平台上的基于磁盘的文件系统. 这节课讲述如何利用File APIs在Android文件系统中读写文件.File 对象非常适合于流式顺序数据的读写. 如图片文件或是网...

Java中excel文件解析总结以及超大文件读写的分析报告

在系统与系统之间进行数据传递时,经常需要使用Excel文件来进行数据的导入或者导出。因此,在Java语言实现这类需求时,往往会面临着数据的导入(解析)或者导出(生成)。Java中可以用来处理Excel...

一文了解 DataLeap 中的 Notebook

一、概述Notebook 是一种支持 REPL 模式的开发环境。所谓「REPL」,即「读取-求值-输出」循环:输入一段代码,立刻得到相应的结果,并继续等待下一次输入。它通常使得探索性的开发和调试更加便...

生成javadoc(生成javacore的命令)

Java Tar生成是一种常用的文件打包和压缩技术,通过将多个文件或目录打包成一个.tar文件,实现了文件的整合和压缩。本文将详细介绍Java Tar生成的原理和使用方法,帮助读者快速掌握这一技术。1...

进大厂必备的Java八股文大全(2022最强精简易懂版)

2022年秋招即将来临,很多同学会问Java面试八股文有必要背吗?答案是,必须背,博主是个三本,今年凭借这篇八股文斩获了多个大厂暑期实习offer,相信秋招一定也可以发挥重要作用。你可以讨厌这种模式,...

JAVA POI实现大数据量excel文件读写及导出

Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 文档,包括 Excel。处理大数据量的 Excel 文件时,建议使用 SXSSF (Streaming U...