使用Files.readAllBytes()和String构造函数
import java.nio.file.Files;
import java.nio.file.Paths;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
byte[] bytes = Files.readAllBytes(Paths.get(filePath));
return new String(bytes);
}
}
这种方法简单直接,适用于Java 7及以上版本。需要注意文件大小不能过大,否则可能耗尽内存。
使用Files.readAllLines()和String.join()
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
List<String> lines = Files.readAllLines(Paths.get(filePath));
return String.join(System.lineSeparator(), lines);
}
}
这种方法会保留原始文件的行分隔符,适合需要保持行结构的场景。
使用BufferedReader和StringBuilder
import java.io.BufferedReader;
import java.io.FileReader;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
StringBuilder contentBuilder = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String currentLine;
while ((currentLine = br.readLine()) != null) {
contentBuilder.append(currentLine).append("\n");
}
}
return contentBuilder.toString();
}
}
这种方法内存效率更高,适合处理大文件,可以逐行读取而不必一次性加载整个文件。
使用Files.lines()和Stream API
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
return Files.lines(Paths.get(filePath))
.collect(Collectors.joining(System.lineSeparator()));
}
}
Java 8的Stream API提供了更现代的解决方案,代码更简洁,同样适合大文件处理。
使用Scanner类
import java.io.File;
import java.util.Scanner;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
Scanner scanner = new Scanner(new File(filePath));
scanner.useDelimiter("\\Z");
String content = scanner.next();
scanner.close();
return content;
}
}
这种方法使用Scanner的\Z模式匹配文件末尾,适合需要特定分隔符处理的场景。
使用Apache Commons IO
import org.apache.commons.io.FileUtils;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
return FileUtils.readFileToString(new File(filePath), "UTF-8");
}
}
如果项目已经使用Apache Commons IO库,这种方法是最简洁的解决方案,自动处理编码问题。
使用Guava库
import com.google.common.io.Files;
import java.nio.charset.StandardCharsets;
public class ReadFileToString {
public static String readFile(String filePath) throws Exception {
return Files.asCharSource(new File(filePath), StandardCharsets.UTF_8)
.read();
}
}
对于使用Guava的项目,这种方法提供了简洁的API和良好的字符编码支持。
处理字符编码
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ReadFileToString {
public static String readFile(String filePath, String charsetName) throws Exception {
return new String(Files.readAllBytes(Paths.get(filePath)), Charset.forName(charsetName));
}
}
明确指定字符编码可以避免平台默认编码带来的问题,特别是处理非ASCII文件时。
性能考虑
对于大文件,推荐使用BufferedReader或Files.lines()的流式处理方法。小文件可以使用readAllBytes或readAllLines以获得更简洁的代码。外部库如Apache Commons或Guava简化了代码但增加了依赖。
异常处理
public class ReadFileToString {
public static String readFileWithHandling(String filePath) {
try {
return new String(Files.readAllBytes(Paths.get(filePath)));
} catch (IOException e) {
System.err.println("Error reading file: " + e.getMessage());
return "";
}
}
}
在生产代码中应妥善处理IOException,根据应用场景决定是抛出还是捕获异常。
559

被折叠的 条评论
为什么被折叠?



