1. 使用字节流
读文件 (使用 FileInputStream)
java
import java.io.FileInputStream;
import java.io.IOException;
public class FileReadByteStream {
public static void main(String[] args) {
// FileInputStream用于读取文件的字节输入流
try (FileInputStream fis = new FileInputStream("example.txt")) {
int content;
// 逐字节读取文件内容,直到文件末尾
while ((content = fis.read()) != -1) {
// 将字节转换为字符并打印
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
写文件 (使用 FileOutputStream)
java
import java.io.FileOutputStream;
import java.io.IOException;
public class FileWriteByteStream {
public static void main(String[] args) {
String data = "Hello, World!";
// FileOutputStream用于写入文件的字节输出流
try (FileOutputStream fos = new FileOutputStream("example.txt")) {
// 将字符串转换为字节数组并写入文件
fos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 使用字符流
读文件 (使用 FileReader)
java
import java.io.FileReader;
import java.io.IOException;
public class FileReadCharStream {
public static void main(String[] args) {
// FileReader用于读取文件的字符输入流
try (FileReader fr = new FileReader("example.txt")) {
int content;
// 逐字符读取文件内容,直到文件末尾
while ((content = fr.read()) != -1) {
// 打印读取的字符
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
写文件 (使用 FileWriter)
java
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteCharStream {
public static void main(String[] args) {
String data = "Hello, World!";
// FileWriter用于写入文件的字符输出流
try (FileWriter fw = new FileWriter("example.txt")) {
// 将字符串写入文件
fw.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 使用缓冲流
读文件 (使用 BufferedReader)
java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadBufferedStream {
public static void main(String[] args) {
// BufferedReader用于高效读取字符输入流
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
// 按行读取文件内容,直到文件末尾
while ((line = br.readLine()) != null) {
// 打印读取的行
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
写文件 (使用 BufferedWriter)
java
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteBufferedStream {
public static void main(String[] args) {
String data = "Hello, World!";
// BufferedWriter用于高效写入字符输出流
try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
// 将字符串写入文件
bw.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 使用NIO
读文件 (使用 Files.readAllLines)
java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class FileReadNIO {
public static void main(String[] args) {
try {
// 读取文件的所有行并返回一个列表
List<String> lines = Files.readAllLines(Paths.get("example.txt"));
// 打印每一行
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
写文件 (使用 Files.write)
java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
import java.util.List;
public class FileWriteNIO {
public static void main(String[] args) {
List<String> lines = Arrays.asList("Hello, World!", "Welcome to NIO.");
try {
// 将列表中的所有行写入文件,如果文件不存在则创建文件
Files.write(Paths.get("example.txt"), lines, StandardOpenOption.CREATE);
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
- 字节流 (
FileInputStream/FileOutputStream) : 适用于处理二进制文件(如图片、音频)。字节流处理单个字节。 - 字符流 (
FileReader/FileWriter) : 适用于处理文本文件。字符流处理单个字符或字符串。 - 缓冲流 (
BufferedReader/BufferedWriter) : 提高文件读写效率,适用于读写大文件或频繁操作。缓冲流通过内部缓冲区减少实际IO操作的次数。 - NIO (
Files.readAllLines/Files.write) : 更高效的文件操作方式,适用于需要高性能文件读写操作。NIO (New IO) 提供了非阻塞IO操作和更高效的文件处理方法。
选择适合的文件读写方式可以显著提高程序的效率和可读性。这些示例展示了如何在Java中进行文件读写操作,并且每个示例都配有详细的注释,便于理解和学习。
附一张思维导图