fileinputstream 是 java 中用于从文件逐字节读取二进制数据的基础输入流,适合读取任意类型文件;处理文本时需显式指定编码(如 utf-8),推荐使用字节数组批量读取并配合 try-with-resources 自动关闭。

FileInputStream 是 Java 中最基础的字节输入流,用于从文件中逐字节读取原始二进制数据。它适合读取图片、音频、文本等任意类型文件,但处理纯文本时需注意字符编码问题(建议文本优先用 FileReader 或 InputStreamReader 配合指定编码)。
基本用法:单字节读取(简单但效率低)
适用于小文件或教学演示,每次调用 read() 返回一个 0–255 的 int 值(实际是 byte 转成 int,-1 表示读到末尾):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 创建流:
new FileInputStream("path/to/file.txt") - 循环调用
read(),直到返回 -1 - 记得在
finally或 try-with-resources 中关闭流,防止资源泄漏
推荐方式:使用字节数组批量读取
通过 read(byte[] b) 一次读取多个字节到缓冲区,大幅提升性能:
- 定义字节数组,如
byte[] buffer = new byte[8192](常见缓冲区大小为 4KB–8KB) - 调用
int len = fis.read(buffer),返回实际读取字节数(可能小于数组长度) - 用
new String(buffer, 0, len)将有效字节转为字符串(仅限文本;需指定编码如"UTF-8")
try (FileInputStream fis = new FileInputStream("hello.txt")) {<br> byte[] buf = new byte[1024];<br> int len;<br> while ((len = fis.read(buf)) != -1) {<br> System.out.print(new String(buf, 0, len, "UTF-8"));<br> }<br>}
更现代写法:配合 try-with-resources 自动关闭
Java 7+ 推荐用 try-with-resources,无需手动 close(),异常时也能确保释放资源:
- 将
FileInputStream声明在 try 括号内,如try (FileInputStream fis = new FileInputStream(file)) { ... } - 流会在 try 块结束时自动关闭,包括发生异常的情况
- 若需同时读多个流(如复制文件),可逗号分隔多个声明
常见问题提醒
-
中文乱码? 直接用
FileInputStream读文本时,new String(byte[])默认用平台编码(如 Windows 是 GBK),务必显式传入"UTF-8"等正确编码 -
文件不存在? 构造时抛
FileNotFoundException,需捕获或声明 throws - 读取非文本文件? 如图片、PDF,就不要转字符串,直接操作字节数组或写入另一输出流即可
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










