跳到主要内容

Java FileInputStream 类

提示
  1. FileInputStream的基本用途:Java中的FileInputStream类用于从文件中读取数据(以字节为单位),它是InputStream类的一个子类。
  2. 创建和使用FileInputStream:可以通过提供文件路径或文件对象来创建FileInputStream实例,使用read()available()skip()等方法来操作文件内容。
  3. 关闭文件输入流:使用close()方法来关闭FileInputStream,确保释放资源。其他方法,如getChannel()reset(),提供了更多的文件操作功能。

java.io 包中的 FileInputStream 类可用于从文件中读取数据(以字节为单位)。

它扩展了 InputStream 抽象类。

Java 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

在上述示例中,

  1. 我们首先使用 available() 方法检查文件输入流中可用字节的数量。
  2. 然后,我们使用了 read() 方法 3 次从文件输入流中读取 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 文档)