Module java.base
Package java.io

Class FileInputStream

java.lang.Object
java.io.InputStream
java.io.FileInputStream
所有已实现的接口:
Closeable, AutoCloseable

public class FileInputStream extends InputStream
FileInputStream 从文件系统中的文件获取输入字节。可用的文件取决于主机环境。

FileInputStream 用于读取原始字节流,例如图像数据。要读取字符流,请考虑使用 FileReader

API 注意:
应调用 close() 方法来释放此流使用的资源,可以直接调用,也可以使用 try-with-resources 语句。
实现要求:
子类负责清理子类获取的资源。需要在流变得不可达后进行资源清理的子类应使用 Cleaner 或其他机制。
自版本:
1.0
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    通过打开与文件系统中的 File 对象 file 命名的实际文件建立 FileInputStream
    通过使用表示文件系统中实际文件的现有连接的文件描述符 fdObj 创建 FileInputStream
    通过打开与文件系统中路径名 name 命名的实际文件建立 FileInputStream
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    返回可以在下一次调用此输入流的方法时读取(或跳过)的剩余字节数的估计值,而不会被阻塞。
    void
    close()
    关闭此文件输入流并释放与流关联的任何系统资源。
    返回与此文件输入流关联的唯一 FileChannel 对象。
    getFD()
    返回代表此 FileInputStream 使用的文件系统中实际文件的连接的 FileDescriptor 对象。
    int
    read()
    从此输入流中读取一个字节的数据。
    int
    read(byte[] b)
    从此输入流中最多读取 b.length 字节的数据到字节数组中。
    int
    read(byte[] b, int off, int len)
    从此输入流中最多读取 len 字节的数据到字节数组中。
    long
    skip(long n)
    从输入流中跳过并丢弃 n 字节的数据。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • FileInputStream

      public FileInputStream(String name) throws FileNotFoundException
      通过打开与文件系统中路径名 name 命名的实际文件建立 FileInputStream。创建一个新的 FileDescriptor 对象来表示此文件连接。

      首先,如果存在安全管理器,则将使用 name 参数调用其 checkRead 方法。

      如果命名文件不存在,是目录而不是常规文件,或由于某种其他原因无法打开以供读取,则会抛出 FileNotFoundException

      参数:
      name - 系统相关的文件名。
      抛出:
      FileNotFoundException - 如果文件不存在,是目录而不是常规文件,或由于某种其他原因无法打开以供读取。
      SecurityException - 如果存在安全管理器且其 checkRead 方法拒绝对文件的读取访问。
      参见:
    • FileInputStream

      public FileInputStream(File file) throws FileNotFoundException
      通过打开与文件系统中的 File 对象 file 命名的实际文件建立 FileInputStream。创建一个新的 FileDescriptor 对象来表示此文件连接。

      首先,如果存在安全管理器,则将使用由 file 参数表示的路径调用其 checkRead 方法。

      如果命名文件不存在,是目录而不是常规文件,或由于某种其他原因无法打开以供读取,则会抛出 FileNotFoundException

      参数:
      file - 要打开以供读取的文件。
      抛出:
      FileNotFoundException - 如果文件不存在,是目录而不是常规文件,或由于某种其他原因无法打开以供读取。
      SecurityException - 如果存在安全管理器且其 checkRead 方法拒绝对文件的读取访问。
      参见:
    • FileInputStream

      public FileInputStream(FileDescriptor fdObj)
      通过使用表示文件系统中实际文件的现有连接的文件描述符 fdObj 创建 FileInputStream

      如果存在安全管理器,则将使用文件描述符 fdObj 调用其 checkRead 方法,以查看是否可以读取文件描述符。如果对文件描述符的读取访问被拒绝,则会抛出 SecurityException

      如果 fdObj 为 null,则会抛出 NullPointerException

      如果 fdObjinvalid,则此构造函数不会抛出异常。但是,如果在结果流上调用方法以尝试对流进行 I/O,则会抛出 IOException

      参数:
      fdObj - 要打开以供读取的文件描述符。
      抛出:
      SecurityException - 如果存在安全管理器且其 checkRead 方法拒绝对文件描述符的读取访问。
      参见:
  • Method Details

    • read

      public int read() throws IOException
      从此输入流中读取一个字节的数据。如果尚未有输入可用,则此方法将阻塞。
      指定者:
      read 在类 InputStream
      返回:
      下一个数据字节,如果已到达文件末尾,则返回 -1
      抛出:
      IOException - 如果发生 I/O 错误。
    • read

      public int read(byte[] b) throws IOException
      从此输入流中最多读取 b.length 字节的数据到字节数组中。此方法将阻塞,直到有一些输入可用。
      覆盖:
      read 在类 InputStream
      参数:
      b - 要读取数据的缓冲区。
      返回:
      读入缓冲区的总字节数,如果没有更多数据因已到达文件末尾而返回 -1
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b, int off, int len) throws IOException
      从此输入流中最多读取 len 字节的数据到字节数组中。如果 len 不为零,则该方法将阻塞,直到有一些输入可用;否则,不会读取任何字节,返回 0
      覆盖:
      read 在类 InputStream
      参数:
      b - 要读取数据的缓冲区。
      off - 写入数据的数组 b 中的起始偏移量。
      len - 要读取的最大字节数。
      返回:
      读入缓冲区的总字节数,如果没有更多数据因已到达流末尾而返回 -1
      抛出:
      NullPointerException - 如果 bnull
      IndexOutOfBoundsException - 如果 off 为负数,len 为负数,或 len 大于 b.length - off
      IOException - 如果发生 I/O 错误。
      参见:
    • skip

      public long skip(long n) throws IOException
      跳过并丢弃输入流中的n字节数据。

      skip方法可能因为各种原因而最终跳过一些较小数量的字节,可能为0。如果n为负数,则该方法将尝试向后跳过。如果后备文件在当前位置不支持向后跳过,则会抛出IOException。返回实际跳过的字节数。如果向前跳过,则返回正值。如果向后跳过,则返回负值。

      该方法可能会跳过比后备文件中剩余的字节数更多的字节。这不会产生异常,跳过的字节数可能包括超出后备文件EOF的一些字节。在跳过文件末尾后尝试从流中读取将导致返回-1,表示文件结束。

      覆盖:
      skip 在类中 InputStream
      参数:
      n - 要跳过的字节数。
      返回:
      实际跳过的字节数。
      抛出:
      IOException - 如果n为负数,如果流不支持寻址,或者发生I/O错误。
      参见:
    • available

      public int available() throws IOException
      返回一个估计值,表示可以从此输入流中读取(或跳过)的剩余字节数,而不会被下一次调用此输入流的方法阻塞。当文件位置超出EOF时返回0。下一次调用可能是同一个线程或另一个线程。读取或跳过这么多字节不会阻塞,但可能读取或跳过较少的字节。

      在某些情况下,非阻塞读取(或跳过)可能看起来被阻塞,而实际上只是慢,例如在慢速网络上读取大文件时。

      覆盖:
      available 在类中 InputStream
      返回:
      估计可以从此输入流中读取(或跳过)的剩余字节数,而不会阻塞。
      抛出:
      IOException - 如果此文件输入流已通过调用close关闭,或者发生I/O错误。
    • close

      public void close() throws IOException
      关闭此文件输入流并释放与流相关联的任何系统资源。

      如果此流有一个关联的通道,则该通道也将被关闭。

      指定者:
      close 在接口中 AutoCloseable
      指定者:
      close 在接口中 Closeable
      覆盖:
      close 在类中 InputStream
      API注释:
      重写close()以执行清理操作仅在直接调用或由try-with-resources调用时是可靠的。
      实现要求:
      需要在流变得不可达后进行资源清理的子类应使用Cleaner机制。

      如果此流有一个关联的通道,则此方法将关闭该通道,进而关闭此流。重写此方法的子类应准备处理可能的重入调用。

      抛出:
      IOException - 如果发生I/O错误。
    • getFD

      public final FileDescriptor getFD() throws IOException
      返回代表此FileInputStream正在使用的文件系统中实际文件连接的FileDescriptor对象。
      返回:
      与此流关联的文件描述符对象。
      抛出:
      IOException - 如果发生I/O错误。
      参见:
    • getChannel

      public FileChannel getChannel()
      返回与此文件输入流关联的唯一FileChannel对象。

      返回的通道的初始position将等于到目前为止从文件中读取的字节数。从此流读取字节将增加通道的位置。显式更改通道的位置,或通过读取更改此流的文件位置。

      返回:
      与此文件输入流关联的文件通道
      自:
      1.4