Java IO流

tim-qtp...大约 5 分钟Java基础

Java File:IO 流的起点与终点

在 IO 操作中,文件的操作相对来说是比较复杂的,但也是使用频率最高的部分,几乎所有的项目中几乎都躺着一个叫做 FileUtil 或者 FileUtils 的工具类。

java.io.File 类是专门对文件进行操作的类,注意只能对文件本身进行操作,不能对文件内容进行操作,想要操作内容,必须借助输入输出流。

File 类是文件和目录的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

比较常用的构造方法有三个:

1、 File(String pathname)

2、 File(String parent, String child)

3、 File(File parent, String child)

// 文件路径名
String path = "/Users/username/123.txt";
File file1 = new File(path);

// 通过父路径和子路径字符串
String parent = "/Users/username/aaa";
String child = "bbb.txt";
File file2 = new File(parent, child); 

// 通过父级File对象和子路径字符串
File parentDir = new File("/Users/username/aaa");
String child = "bbb.txt";
File file3 = new File(parentDir, child); 

注意,macOS 路径使用正斜杠(/)作为路径分隔符,而 Windows 路径使用反斜杠(\)作为路径分隔符。所以在遇到路径分隔符的时候,不要直接去写/或者\

File 类的注意点:

  1. 一个 File 对象代表硬盘中实际存在的一个文件或者目录。
  2. File 类的构造方法不会检验这个文件或目录是否真实存在,因此无论该路径下是否存在文件或者目录,都不影响 File 对象的创建。

File 常用方法

File 的常用方法主要分为获取功能、获取绝对路径和相对路径、判断功能、创建删除功能的方法。

1)获取功能的方法

1、getAbsolutePath() :返回此 File 的绝对路径。

2、getPath() :结果和 getAbsolutePath 一致。

3、getName() :返回文件名或目录名。

2)判断功能的方法

1、 exists() :判断文件或目录是否存在。

2、 isDirectory() :判断是否为目录。

3、isFile() :判断是否为文件。

3)创建、删除功能的方法

  • createNewFile() :文件不存在,创建一个新的空文件并返回true,文件存在,不创建文件并返回false
  • delete() :删除文件或目录。如果是目录,只有目录为空才能删除。
  • mkdir() :只能创建一级目录,如果父目录不存在,则创建失败。返回 true 表示创建成功,返回 false 表示创建失败。
  • mkdirs() :可以创建多级目录,如果父目录不存在,则会一并创建。返回 true 表示创建成功,返回 false 表示创建失败或目录已经存在。

Hutool FileUtil 类

FileUtil 类是 Hutoolopen in new window 工具包中的文件操作工具类,提供了一系列简单易用的文件操作方法,使用非常方便。

FileUtil 类包含以下几类操作工具:

  • 文件操作:包括文件目录的新建、删除、复制、移动、改名等
  • 文件判断:判断文件或目录是否非空,是否为目录,是否为文件等等。
  • 绝对路径:针对 ClassPath 中的文件转换为绝对路径文件。
  • 文件名:主文件名,扩展名的获取
  • 读操作:包括 getReader、readXXX 操作
  • 写操作:包括 getWriter、writeXXX 操作

下面是 FileUtil 类中一些常用的方法:

1、copyFile:复制文件。该方法可以将指定的源文件复制到指定的目标文件中。

File dest = FileUtil.file("FileUtilDemo2.java");
FileUtil.copyFile(file, dest);

2、move:移动文件或目录。该方法可以将指定的源文件或目录移动到指定的目标文件或目录中。

FileUtil.move(file, dest, true);

3、del:删除文件或目录。该方法可以删除指定的文件或目录,如果指定的文件或目录不存在,则会抛出异常。

FileUtil.del(file);

4、rename:重命名文件或目录。该方法可以将指定的文件或目录重命名为指定的新名称。

FileUtil.rename(file, "FileUtilDemo3.java", true);

5、readLines:从文件中读取每一行数据。

FileUtil.readLines(file, "UTF-8").forEach(System.out::println);

这里插个眼,时间充裕了,一定要多看看Hutool的源码,我觉得可以提升不少编程水平!

Java 字节流和字符流

Java 的 I/O(输入/输出)流是用于处理输入和输出数据的类库。通过流,程序可以从各种输入源(如文件、网络)读取数据,或将数据写入目标位置(如文件、控制台)。

I/O 流分为两大类:字节流字符流,分别用于处理字节级和字符级的数据:

  • 字节流:处理 8 位字节数据,适合于处理二进制文件,如图片、视频等。主要类是 InputStreamOutputStream 及其子类。
  • 字符流:处理 16 位字符数据,适合于处理文本文件。主要类是 ReaderWriter 及其子类。

扩展知识

输入流与输出流

输入流(InputStream):用于读取数据的流。

输出流(OutputStream):用于写入数据的流。

按照处理的数据类型,基于这两种输入输出的类型进行分类:

1)字节流(Byte Streams):

输入流:InputStream,常用以下几个输入流:

  • FileInputStream:从文件中读取字节数据。
  • BufferedInputStream:为输入流提供缓冲功能,提高读取性能。
  • DataInputStream:读取基本数据类型的数据。

输出流:OutputStream,常用以下几个输出流:

  • FileOutputStream:将字节数据写入文件。
  • BufferedOutputStream:为输出流提供缓冲功能,提高写入性能。
  • DataOutputStream:写入基本数据类型的数据。

2)字符流(Character Streams):

输入流:Reader,常用以下几个输入流:

  • FileReader:从文件中读取字符数据。
  • BufferedReader:为字符输入流提供缓冲功能,提高读取性能。
  • InputStreamReader:将字节流转换为字符流。

输出流:Writer,常用以下几个输出流:

  • FileWriter:将字符数据写入文件。
  • BufferedWriter:为字符输出流提供缓冲功能,提高写入性能。
  • OutputStreamWriter:将字符流转换为字节流。

缓冲流

缓冲流是对基础流的包装,可以显著提高 I/O 性能。常见的缓冲流有 BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter,它们通过内部缓冲区减少实际 I/O 操作的次数

在处理大文件或频繁 I/O 操作时,使用缓冲流可以有效提高性能。