Java FileInputStream 类使用说明及实例

FileInputStream 类可以以字节为单位从文件中读取数据。在本教程中,我们将通过示例了解 Java FileInputStream 及其用法。

java.io 包的 FileInputStream 类可以以字节为单位从文件中读取数据。在本教程中,我们将通过示例了解 Java FileInputStream 及其用法。

FileInputStream 类扩展了 InputStream 抽象类。

Java FileInputStream 是 InputStream 类的子类。
Java FileInputStream 类

在了解之前 FileInputStream,请首先了解一下Java 文件操作

创建一个文件输入流

FileInputStream 类位于 java.io 包中,FileInputStream 类提供了 2 个构造方法用来创建文件输入流。如下所示:

  1. 使用文件路径
FileInputStream input = new FileInputStream(filePath);

在这里,我们创建了一个输入流,通过文件路径参数指定了输入流要操作的文件。

  1. 使用文件对象
File fileObject = new File(filePath);
FileInputStream input = new FileInputStream(fileObject);

在这里,我们通过文件对象作为参数创建了一个输入流。文件对象指向了要操作的文件。

FileInputStream 的方法

FileInputStream 类实现了的 InputStream 类中的定义的所有的抽象方法。

read() 方法

  • read() - 从文件中读取一个字节
  • read(byte[] array) - 从文件中读取字节并存储在指定的数组中
  • read(byte[] array, int start, int length) - 读取从 start 指定的开始的长度为 length 的字节数到指定的数组中

假设我们有一个名为 input.txt 的文件,其内容如下。

This is a line of text inside the file.

让我们尝试使用 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();
   }
  }
}

输出

文件中的内容: This is a line of text inside the file.

在上面的例子中,我们创建了一个名为 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 {
      // 这里还是以上面的文件为例
      FileInputStream input = new FileInputStream("input.txt");

      // 输出可用的字节数
      System.out.println("Available bytes: " + input.available());

      // 读取 3 个字节
      input.read();
      input.read();
      input.read();

      // 读取 3 个字节后,输出可用的字节数
      System.out.println("Available bytes: " + input.available());

      input.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Available bytes: 39
Available bytes: 36

在上面的例子中,

  1. 首先,我们使用 available() 方法来返回输入流中的可用字节数。
  2. 然后,我们使用了 3 次 read() 方法从输入流中读取 3 个字节。
  3. 最后,我们再次检查了可用字节。这次可用字节减少了 3 个。

skip() 方法

skip() 方法跳过指定数量的字节。例如,

import java.io.FileInputStream;

public class Main {
  public static void main(String args[]) {
    try {
      // 这里还是以上面的文件为例
      FileInputStream input = new FileInputStream("input.txt");

      // 跳过 5 个字节
      input.skip(5);
      System.out.println("Input stream after skipping 5 bytes: ");

      int i = input.read();
      while (i != -1) {
        System.out.print((char) i);

        i = input.read();
      }

      input.close();
    }
    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Input stream after skipping 5 bytes: is a line of text inside the file.

在上面的例子中,我们使用了 skip() 方法从输入流的当前位置中跳过 5 个字节的数据。因此,在文件输入刘中读取不到 This 字符串了。

close() 方法

close() 方法用来关闭文件输入流。一旦调用了 close() 方法,我们就不能使用输入流来读取数据了。

在以上所有示例中,我们都使用了 close() 关闭文件输入流的方法。

FileInputStream 的其他方法

方法 说明
finalize() 确保销毁对象的时候 close() 方法被调用
getChannel() 返回与输入流相关联的 FileChannel 对象
getFD() 返回与输入流关联的文件描述符
mark() 标记输入流中已读取数据的位置
reset() 将控制返回到输入流中设置标记的点