文件读取 - FileReader
# 文件读取 - FileReader
简介
FileReader
是 Hutool 提供的一个方便的文件读取工具类,专注于简化文件读取操作。虽然 JDK 本身也提供了 FileReader
类,但 Hutool 的 FileReader
在功能和使用便捷性上有显著提升。FileReader
支持多种读取方式,如读取字节数组、字符串、按行读取等,并且支持指定文件编码方式。
# 1. 快速读取文件内容
FileReader
提供了多种方法来快速读取文件内容,支持读取为字节数组、字符串以及按行读取。默认情况下,FileReader
使用 UTF-8 编码读取文件内容。
# 1.1 读取文件内容为字符串
readString
方法用于将整个文件内容读取为字符串。默认使用 UTF-8 编码,可以在构造方法中指定其他编码方式。
import cn.hutool.core.io.file.FileReader;
public class FileReaderExample {
public static void main(String[] args) {
// 创建一个 FileReader 对象,默认使用 UTF-8 编码
FileReader fileReader = new FileReader("d:/test.properties");
// 读取文件内容为字符串
String content = fileReader.readString();
// 输出文件内容
System.out.println("文件内容为:\n" + content);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
FileReader(String filePath)
:创建一个FileReader
对象,默认使用 UTF-8 编码。filePath
:文件的路径。
readString()
:将整个文件内容读取为字符串。- 返回值:文件内容的字符串表示。
作用: 用于快速将文件内容读取为字符串,适合读取配置文件、文本文件等内容。
实际开发场景: 在读取配置文件时,可以使用
readString
方法将文件内容一次性读取为字符串,并进行解析。
# 1.2 读取文件内容为字节数组
readBytes
方法用于将文件内容读取为字节数组。这在处理二进制文件时非常有用,如图像、音频文件等。
import cn.hutool.core.io.file.FileReader;
public class FileReaderExample {
public static void main(String[] args) {
// 创建一个 FileReader 对象
FileReader fileReader = new FileReader("d:/test.jpg");
// 读取文件内容为字节数组
byte[] content = fileReader.readBytes();
// 输出字节数组的长度
System.out.println("文件字节长度为:" + content.length);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
readBytes()
:将整个文件内容读取为字节数组。- 返回值:文件内容的字节数组表示。
作用: 用于读取二进制文件,如图片、音频、视频等内容。
实际开发场景: 在处理文件上传或文件下载功能时,可能需要读取文件内容为字节数组以进行传输或保存。
# 1.3 按行读取文件内容
readLines
方法用于按行读取文件内容,并将每一行作为一个字符串存储在列表中。此方法非常适合逐行处理文件内容,如读取日志文件等。
import cn.hutool.core.io.file.FileReader;
import java.util.List;
public class FileReaderExample {
public static void main(String[] args) {
// 创建一个 FileReader 对象
FileReader fileReader = new FileReader("d:/test.txt");
// 按行读取文件内容,返回一个字符串列表
List<String> lines = fileReader.readLines();
// 输出每一行内容
for (String line : lines) {
System.out.println(line);
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
readLines()
:按行读取文件内容,将每一行作为一个字符串存储在列表中。- 返回值:包含文件每一行内容的字符串列表。
作用: 用于按行读取文件内容,适合处理需要逐行解析的文件,如日志文件、CSV 文件等。
实际开发场景: 在分析日志文件或处理数据文件时,可以使用
readLines
方法逐行读取文件内容并进行处理。
# 2. 转换为流或 BufferedReader
除了直接读取文件内容,FileReader
还提供了将文件转换为输入流或 BufferedReader
的方法,以支持更复杂的文件操作。
# 2.1 获取文件的 BufferedReader
getReader
方法用于获取文件的 BufferedReader
对象,方便进行逐行读取或其他基于 Reader
的操作。
import cn.hutool.core.io.file.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
// 创建一个 FileReader 对象
FileReader fileReader = new FileReader("d:/test.txt");
// 获取 BufferedReader 对象
try (BufferedReader reader = fileReader.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
getReader()
:获取文件的BufferedReader
对象。- 返回值:
BufferedReader
对象,用于读取文件内容。
作用: 用于获取文件的
BufferedReader
对象,以支持逐行读取或其他基于字符流的操作。实际开发场景: 当需要逐行读取文件或进行复杂的文本解析时,可以使用
getReader
方法获取BufferedReader
进行操作。- 返回值:
# 2.2 获取文件的输入流
getInputStream
方法用于获取文件的输入流 InputStream
对象,适合需要直接操作字节流的场景。
import cn.hutool.core.io.file.FileReader;
import java.io.IOException;
import java.io.InputStream;
public class FileReaderExample {
public static void main(String[] args) {
// 创建一个 FileReader 对象
FileReader fileReader = new FileReader("d:/test.jpg");
// 获取文件的输入流
try (InputStream inputStream = fileReader.getInputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
// 处理读取的字节数据
System.out.println("读取了 " + bytesRead + " 字节");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
getInputStream()
:获取文件的输入流InputStream
对象。- 返回值:
InputStream
对象,用于读取文件内容。
作用: 用于获取文件的输入流,适合需要直接操作字节流的场景。
实际开发场景: 当需要处理大文件、二进制数据或将文件内容传输到网络时,可以使用
getInputStream
方法获取InputStream
对象。- 返回值: