Java FileInputStream 类
- FileInputStream的基本用途:Java中的
FileInputStream
类用于从文件中读取数据(以字节为单位),它是InputStream
类的一个子类。 - 创建和使用FileInputStream:可以通过提供文件路径或文件对象 来创建
FileInputStream
实例,使用read()
、available()
、skip()
等方法来操作文件内容。 - 关闭文件输入流:使用
close()
方法来关闭FileInputStream
,确保释放资源。其他方法,如getChannel()
和reset()
,提供了更多的文件操作功能。
java.io
包中的 FileInputStream
类可用于从文件中读取数据(以字节为单位)。
它扩展了 InputStream
抽象类。
在学习 FileInputStream
之前,请确保了解 Java 文件。
创建 FileInputStream
为了创建文件输入流,我们首先必须导入 java.io.FileInputStream
包。一旦导入了该包,下面是我们在 Java 中创建文件输入流的方法。
1. 使用文件路径
FileInputStream input = new FileInputStream(stringPath);
在这里,我们创建了一个输入流,它将链接到由 path
指定的文件。
2. 使用文件对象
FileInputStream input = new FileInputStream(File fileObject);
在这里,我们创建了一个输入流,它将链接到由 fileObject
指定的文件。
FileInputStream 的方法
FileInputStream
类为 InputStream
类中存在的不同方法提供了实现。
read() 方法
read()
- 从文件中读取单个字节read(byte[] array)
- 从文件中读取字节并存储在指定数组中read(byte[] array, int start, int length)
- 从文件中读取等于length
的字节数并从位置start
开始存储在指定数组中
假设我们有一个名为 input.txt 的文件,其中包含以下内容。
这是文件内的一行文本。
让我们尝试使用 FileInputStream
读取这个文件。
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
FileInputStream input = new FileInputStream("input.txt");
System.out.println("文件中的数据:");
// 读取第一个字节
int i = input.read();
while(i != -1) {
System.out.print((char)i);
// 从文件中读取下一个字节
i = input.read();
}
input.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
输出
文件中的数据:
这是文件内的一行文本。
在上述示例中,我们创建了一个名为 input
的文件输入流。该输入流与 input.txt 文件关联。
FileInputStream input = new FileInputStream("input.txt");
为了从文件中读取数据,我们在 while 循环中使用了 read()
方法。
available() 方法
要获取可用字节数,我们可以使用 available()
方法。例如,
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
// 假设 input.txt 文件包含以下文本
// 这是文件内的一行文本。
FileInputStream input = new FileInputStream("input.txt");
// 返回可用字节数
System.out.println("初始时可用字节数:" + input.available());
// 从文件中读取 3 个字节
input.read();
input.read();
input.read();
// 返回可用字节数
System.out.println("末尾时可用字节数:" + input.available());
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
输出
初始时可用字节数:39
末尾时可用字节数:36
在上述示例中,
- 我们首先使用
available()
方法检查文件输入流中可用字节的数量。 - 然后,我们使用了
read()
方法 3 次从文件输入流中读取 3 个字节。 - 现在,在读取了字节之后,我们再次检查了可用字节。这一次,可用字节减少了 3 个。
skip() 方法
为了丢弃并跳过指定数量的字节,我们可以使用 skip()
方法。例如,
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
// 假设 input.txt 文件包含以下文本
// 这是文件内的一行文本。
FileInputStream input = new FileInputStream("input.txt");
// 跳过 5 个字节
input.skip(5);
System.out.println("跳过 5 个字节后的输入流:");
// 读取第一个字节
int i = input.read();
while (i != -1) {
System.out.print((char) i);
// 从文件中读取下一个字节
i = input.read();
}
// close() 方法
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}
输出
跳过 5 个字节后的输入流:
is a line of text inside the file.
在上述示例中,我们使用了 skip()
方法跳过文件输入流中的 5 个字节数据。因此,表示文本 "This " 的字节没有从输入流中读取。
close() 方法
为了关闭文件输入流,我们可以使用 close()
方法。一旦调用了 close()
方法,我们就不能使用输入流来读取数据。
在所有上述示例中,我们都使用了 close()
方法来关闭文件输入流。
FileInputStream 的其他方法
方法 | 描述 |
---|---|
finalize() | 确保调用了 close() 方法 |
getChannel() | 返回与输入流关联的 FileChannel 对象 |
getFD() | 返回与输入流关联的文件描述符 |
mark() | 标记输入流中已读取数据的位置 |
reset() | 将控制权返回到输入流中标记位置 |
要了解更多,请访问 Java FileInputStream(官方 Java 文档)。