Java操作TXT文件的基础方法
在Java开发中,处理TXT文件是一项常见任务,无论是读取配置文件、日志数据,还是写入结果信息,都需要掌握文件操作的核心方法,Java提供了多种方式操作TXT文件,本文将详细介绍如何使用标准I/O流、NIO(New I/O)以及第三方库(如Apache Commons IO)实现文件的打开、读取与写入,并针对不同场景提供最佳实践。

使用FileInputStream和FileReader读取TXT文件
Java中最基础的文件读取方式是通过字节流(FileInputStream)和字符流(FileReader),字节流适合处理二进制文件,而字符流专门用于文本文件,能自动处理字符编码问题。
字节流读取(FileInputStream)
FileInputStream以字节为单位读取文件,适合读取无特定编码的文本文件或二进制文件,基本步骤如下:
- 创建File对象,指定文件路径;
- 用FileInputStream打开文件流;
- 读取字节数据并转换为字符串(如使用
String(byte[], charset)); - 关闭流(通过try-finally或try-with-resources确保释放资源)。
示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadByByteStream {
public static void main(String[] args) {
File file = new File("example.txt");
try (FileInputStream fis = new FileInputStream(file)) {
byte[] buffer = new byte[1024];
int bytesRead;
StringBuilder content = new StringBuilder();
while ((bytesRead = fis.read(buffer)) != -1) {
content.append(new String(buffer, 0, bytesRead, "UTF-8"));
}
System.out.println(content.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流读取(FileReader)
FileReader基于字符读取,直接支持文本文件的字符编码转换(默认为系统编码),使用时需结合BufferedReader提高读取效率:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadByCharStream {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用NIO(New I/O)高效读取TXT文件
Java NIO(自Java 1.4引入)提供了更高效的文件操作方式,通过Path和Files类简化了文件读写逻辑,尤其适合大文件处理。
Files.readAllLines()读取全部内容
适合小文件,直接将文件内容读取为List<String>,每行为一个元素:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadByNIO {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(path, java.nio.charset.StandardCharsets.UTF_8);
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Files.lines()流式读取大文件
对于大文件,使用Files.lines()返回Stream<String>,可结合流式处理避免内存溢出:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ReadLargeFileByNIO {
public static void main(String[] args) {
Path path = Paths.get("large_example.txt");
try {
Files.lines(path, java.nio.charset.StandardCharsets.UTF_8)
.filter(line -> line.contains("keyword"))
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用BufferedWriter和FileOutputStream写入TXT文件
写入TXT文件时,同样需要区分字节流和字符流,字符流(BufferedWriter)更适合文本写入,能自动处理换行符和编码问题。
字符流写入(BufferedWriter)
BufferedWriter自带缓冲区,可减少磁盘I/O次数,提高写入效率:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class WriteByCharStream {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt", true))) {
writer.write("Hello, Java!");
writer.newLine(); // 插入换行符
writer.write("This is a text file.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
NIO写入(Files.write())
NIO的Files.write()方法支持直接写入字节数组或字符串,适合简单场景:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
public class WriteByNIO {
public static void main(String[] args) {
Path path = Paths.get("output_nio.txt");
String content = "Hello, NIO!";
try {
Files.write(path, content.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理文件路径与编码问题
文件路径规范
- 使用
Paths.get()或File.separator处理跨平台路径分隔符(Windows用\,Linux/macOS用); - 避免硬编码绝对路径,推荐使用相对路径或配置文件存储路径。
字符编码设置
读写时需明确指定编码(如UTF-8),避免因默认编码(如GBK)导致乱码:

- FileReader/FileWriter默认使用系统编码,可通过
InputStreamReader/OutputStreamWriter指定编码; - NIO的
Files.readAllLines()和Files.write()均支持编码参数。
异常处理与资源管理
文件操作需处理IOException,并通过try-with-resources语法自动关闭资源(避免内存泄漏):
- 对于多个流嵌套(如
BufferedReader(new FileReader(file))),try-with-resources会按逆序关闭; - 检查文件是否存在(
Files.exists(path))及可读可写权限(Files.isReadable(path))。
第三方库简化操作(Apache Commons IO)
若需更简洁的API,可引入Apache Commons IO库(依赖commons-io):
- 读取文件:
FileUtils.readFileToString(new File("file.txt"), "UTF-8"); - 写入文件:
FileUtils.writeStringToFile(new File("file.txt"), "content", "UTF-8"); - 复制/移动文件:
FileUtils.copyFile(src, dest)。
Java操作TXT文件可根据需求选择合适的方式:基础I/O流适合简单场景,NIO适合大文件和高性能需求,第三方库则能进一步简化代码,无论哪种方式,都需注意路径规范、编码设置及资源管理,确保程序健壮性,通过合理选择工具和方法,可高效实现TXT文件的读取与写入功能。


















