Java FileInputStream
FileInputStream
到目前为止,您一直使用 Scanner 类来读取文本文件。Scanner 非常适合处理文本,因为它可以将输入拆分为行、单词或数字。但是,有时您需要更精细的控制。例如,读取二进制数据(如图像、音频或 PDF)时,或者当您需要完全控制原始字节时。在这些情况下,您可以使用 FileInputStream。
读取文本文件(基本示例)
本示例使用 FileInputStream 逐字节读取文本文件,并将结果以字符形式打印出来:
示例
import java.io.FileInputStream; // Import FileInputStream
import java.io.IOException; // Import IOException
public class Main {
public static void main(String[] args) {
// try-with-resources:FileInputStream 将自动关闭。
try (FileInputStream input = new FileInputStream("filename.txt")) {
int i; // 变量用于存储读取的每个字节
// 一次读取一个字节,直到文件末尾(-1 表示"没有更多数据")。
while ((i = input.read()) != -1) {
// 将字节转换为字符并打印到控制台。
System.out.print((char) i);
}
} catch (IOException e) {
// 如果发生错误(例如,找不到文件),则打印错误消息。
System.out.println("Error reading file.");
}
}
}
输出结果为:
Some text from filename.txt
说明:此程序打开filename.txt文件,逐字节读取,并将结果以字符形式打印到控制台。
复制二进制文件(实际示例)
FileInputStream 的真正优势在于它可以处理任何文件类型,而不仅仅是文本文件。以下示例演示如何复制图像文件:
示例
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) {
// 将 image.jpg 复制到 copy.jpg 中
try (FileInputStream input = new FileInputStream("image.jpg");
FileOutputStream output = new FileOutputStream("copy.jpg")) {
int i;
while ((i = input.read()) != -1) {
output.write(i); // 将原始字节写入新文件
}
System.out.println("File copied successfully.");
} catch (IOException e) {
System.out.println("Error handling file.");
}
}
}
说明:此程序读取 image.jpg 并将其写入 copy.jpg。由于它处理的是原始字节,因此可以复制任何类型的文件——文本、图像、音频或 PDF。
注意:该程序还使用了FileOutputStream。FileInputStream用于从文件中读取字节,而FileOutputStream用于向文件中写入字节。它们共同实现了复制任何类型的文件。
您将在下一章中了解更多关于FileOutputStream的内容。
选择合适的类
Java 提供了多种读取文件的方法。以下是每种方法的适用场景:
Scanner- 最适合简单文本,以及需要轻松解析数字或单词的情况。BufferedReader- 最适合大型文本文件,因为它速度更快,并且逐行读取。FileInputStream- 最适合二进制数据(图像、音频、PDF)或需要完全控制原始字节的情况。

