java 如何打开文件
使用 FileInputStream 打开文件
通过 FileInputStream 可以以字节流形式读取文件内容。适用于二进制文件或需要逐字节处理的场景。
import java.io.FileInputStream;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.txt")) {
int content;
while ((content = fis.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 FileReader 打开文本文件
FileReader 是字符流类,适合读取文本文件。会自动处理字符编码,比字节流更高效。
import java.io.FileReader;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("example.txt")) {
int character;
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 BufferedReader 高效读取
BufferedReader 提供缓冲功能,适合大文件读取。可配合 FileReader 使用。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileExample {
public static void main(String[] args) {
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();
}
}
}
使用 Files 类(Java 7+)
java.nio.file.Files 提供了更现代的 API,支持一次性读取所有行或全部字节。
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.List;
public class FileExample {
public static void main(String[] args) {
try {
List<String> lines = Files.readAllLines(Paths.get("example.txt"));
lines.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 Scanner 类解析内容
Scanner 适合需要按特定模式解析文件内容的场景,支持正则表达式分割。

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class FileExample {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(new File("example.txt"))) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
- 文件路径可以是绝对路径或相对路径(相对于工作目录)
- 所有流操作结束后必须关闭资源,推荐使用 try-with-resources 语法
- 处理大文件时优先使用缓冲流(如
BufferedReader)避免内存溢出 - 检查文件是否存在可用
Files.exists(Paths.get("path"))






