如何从文件内容创建 Java 字符串

如何从文件内容创建 Java 字符串

技术背景

在 Java 开发中,经常需要从文件中读取内容并将其转换为字符串进行处理。不同版本的 Java 提供了不同的方法来实现这一需求,同时也可以借助一些外部库来简化操作。

实现步骤

1. Java 11 及以上版本

Java 11 新增了 readString() 方法,可以方便地将小文件内容读取为字符串,同时保留行终止符:

1
2
3
4
5
6
7
8
9
10
11
12
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ReadFileJava11 {
public static void main(String[] args) throws Exception {
Path path = Paths.get("test.txt");
String content = Files.readString(path, StandardCharsets.UTF_8);
System.out.println(content);
}
}

2. Java 7 - 11 版本

对于 Java 7 到 11 之间的版本,可以使用以下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

public class ReadFileJava7To11 {
static String readFile(String path, Charset encoding) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}

public static void main(String[] args) throws Exception {
String content = readFile("test.txt", java.nio.charset.StandardCharsets.UTF_8);
System.out.println(content);
}
}

3. 使用 Scanner

可以使用 Scanner 类读取文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadFileWithScanner {
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(new File("test.txt"));
String text = scanner.useDelimiter("\\A").next();
scanner.close();
System.out.println(text);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

4. 使用 Apache Commons IO 库

如果愿意使用外部库,可以使用 Apache Commons IO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ReadFileWithCommonsIO {
public static String readFile() throws IOException {
File file = new File("data.txt");
return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
}

public static void main(String[] args) throws IOException {
String content = readFile();
System.out.println(content);
}
}

核心代码

Java 11 读取文件为字符串

1
String content = Files.readString(Path.of("readMe.txt"));

Java 7 读取文件为字符串

1
String content = new String(Files.readAllBytes(Paths.get("readMe.txt")), StandardCharsets.UTF_8);

使用 Scanner 读取文件为字符串

1
2
3
4
5
6
try (Scanner scanner = new Scanner(new File("poem.txt"), "UTF-8")) {
String text = scanner.useDelimiter("\\A").next();
System.out.println(text);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

最佳实践

  • 字符编码:在读取文件时,一定要指定字符编码,避免出现乱码问题。通常推荐使用 StandardCharsets.UTF_8
  • 资源管理:使用 try-with-resources 语句来管理文件资源,确保文件在使用后能正确关闭,避免资源泄漏。
  • 内存使用:如果文件较大,建议逐行读取文件,处理一行后丢弃该行,以减少内存占用。

常见问题

  • 字符编码问题:如果不指定字符编码,可能会导致读取的字符串出现乱码。因此,在读取文件时,一定要明确指定字符编码。
  • 资源泄漏问题:如果不正确关闭文件资源,可能会导致资源泄漏。使用 try-with-resources 语句可以有效避免这个问题。
  • 文件过大问题:如果文件过大,一次性读取整个文件可能会导致内存溢出。可以采用逐行读取的方式来处理大文件。

如何从文件内容创建 Java 字符串
https://119291.xyz/posts/how-to-create-java-string-from-file/
作者
ww
发布于
2025年5月26日
许可协议