Java文件读写I/O操作教程
Java文件读写I/O操作教程
Java中的文件输入输出(I/O)操作是处理文件读写的基础功能。本教程将逐步介绍如何使用Java标准库实现文件读写,适合初学者入门。我们将使用java.io
包中的类(如FileReader
、FileWriter
、BufferedReader
和BufferedWriter
),以及Java 7引入的java.nio.file
包(如Files
类)来简化操作。所有代码示例均使用Java 8+语法。
1. 文件读操作(读取文件内容)
读取文件涉及打开文件、读取数据并关闭资源。推荐使用BufferedReader
来高效读取文本文件。
步骤:
- 创建
File
对象指定文件路径。 - 使用
FileReader
包装文件。 - 使用
BufferedReader
提高读取效率。 - 逐行读取内容。
- 使用try-with-resources自动关闭资源(避免资源泄漏)。
示例代码:读取一个文本文件(例如example.txt
)并打印内容:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class ReadFileExample {public static void main(String[] args) {String filePath = "example.txt"; // 文件路径,例如当前目录下的文件try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line); // 打印每一行}} catch (IOException e) {System.err.println("读取文件出错: " + e.getMessage());}}
}
- 解释:此代码使用try-with-resources确保文件流自动关闭。
BufferedReader.readLine()
方法读取一行内容,返回null
时表示文件结束。
2. 文件写操作(写入内容到文件)
写入文件涉及创建或覆盖文件、写入数据并保存。推荐使用BufferedWriter
来高效写入文本。
步骤:
- 创建
File
对象指定文件路径。 - 使用
FileWriter
包装文件(可设置是否追加模式)。 - 使用
BufferedWriter
提高写入效率。 - 写入数据(例如字符串)。
- 使用try-with-resources自动关闭资源。
示例代码:写入内容到文件(例如output.txt
),如果文件存在则覆盖:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class WriteFileExample {public static void main(String[] args) {String filePath = "output.txt"; // 文件路径String content = "Hello, Java I/O!\nThis is a test."; // 要写入的内容try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {writer.write(content); // 写入整个字符串System.out.println("文件写入成功!");} catch (IOException e) {System.err.println("写入文件出错: " + e.getMessage());}}
}
- 解释:
FileWriter
默认覆盖文件内容。如果需要追加内容,使用new FileWriter(filePath, true)
。BufferedWriter.write()
方法写入字符串。
3. 使用NIO.2简化操作(Java 7+推荐)
Java 7引入了Files
类(在java.nio.file
包中),提供更简洁的文件读写方法。它自动处理资源关闭,适合简单操作。
示例代码:读取文件(使用Files.readAllLines
):
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 NioReadExample {public static void main(String[] args) {Path path = Paths.get("example.txt"); // 文件路径try {List<String> lines = Files.readAllLines(path);for (String line : lines) {System.out.println(line);}} catch (IOException e) {System.err.println("读取文件出错: " + e.getMessage());}}
}
示例代码:写入文件(使用Files.write
):
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;public class NioWriteExample {public static void main(String[] args) {Path path = Paths.get("output.txt"); // 文件路径List<String> content = Arrays.asList("Line 1", "Line 2", "Line 3"); // 要写入的内容列表try {Files.write(path, content); // 写入内容,覆盖文件System.out.println("文件写入成功!");} catch (IOException e) {System.err.println("写入文件出错: " + e.getMessage());}}
}
4. 常见问题与提示
- 文件路径:使用相对路径(如
"data.txt"
)或绝对路径(如"C:\\files\\data.txt"
)。Windows路径注意转义反斜杠(\\
)。 - 异常处理:始终处理
IOException
,避免程序崩溃。 - 性能优化:对于大文件,使用
BufferedReader
/BufferedWriter
比直接读写更高效。 - 文件类型:本教程针对文本文件(.txt)。对于二进制文件(如图片),使用
FileInputStream
和FileOutputStream
。 - 资源管理:优先使用try-with-resources(Java 7+特性),防止资源泄漏。