模块 java.base
 java.io

类 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 调用。子类负责清理子类获取的资源。重写 Object.finalize() 以执行清理的子类应修改为使用替代清理机制,例如 Cleaner 并删除重写的 finalize 方法。
实现要求:
如果此 FileInputStream 已被子类化并且 close() 方法已被覆盖,则当 FileInputStream 不可访问时,将调用 close() 方法。否则,如何执行 close() 中描述的资源清理是实现特定的。
自从:
1.0
参见:
  • 构造方法总结

    构造方法
    构造方法
    描述
    通过打开与实际文件的连接来创建 FileInputStream,该文件由文件系统中的 File 对象 file 命名。
    使用文件描述符 fdObj 创建一个 FileInputStream ,它表示与文件系统中实际文件的现有连接。
    通过打开与实际文件的连接来创建 FileInputStream,该文件在文件系统中以路径名 name 命名。
  • 方法总结

    修饰符和类型
    方法
    描述
    int
    返回可以从此输入流中读取(或跳过)的剩余字节数的估计值,而不会被下一次为此输入流的方法调用阻塞。
    void
    关闭此文件输入流并释放与该流关联的所有系统资源。
    返回与此文件输入流关联的唯一 FileChannel 对象。
    返回 FileDescriptor 对象,该对象表示与此 FileInputStream 使用的文件系统中的实际文件的连接。
    int
    read()
    从此输入流中读取一个字节的数据。
    int
    read(byte[] b)
    从此输入流中读取最多 b.length 字节的数据到字节数组中。
    int
    read(byte[] b, int off, int len)
    从此输入流中读取最多 len 字节的数据到字节数组中。
    long
    skip(long n)
    跳过并丢弃输入流中的 n 字节数据。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造方法详细信息

    • FileInputStream

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

      首先,如果有一个安全管理器,它的 checkRead 方法会以 name 参数作为它的参数被调用。

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

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

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

      首先,如果有一个安全管理器,它的 checkRead 方法被调用,以 file 参数表示的路径作为它的参数。

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

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

      public FileInputStream(FileDescriptor  fdObj)
      使用文件描述符 fdObj 创建一个 FileInputStream ,它表示与文件系统中实际文件的现有连接。

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

      如果 fdObj 为空,则抛出 NullPointerException

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

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

    • 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 注意:
      只有在直接调用或通过 try-with-resources 调用时,覆盖 close() 以执行清理操作才是可靠的。不要依赖终结来调用 close ; finalization 不可靠,已弃用。如果需要清理本机资源,则应使用其他机制,例如 Cleaner
      抛出:
      IOException - 如果发生 I/O 错误。
    • getFD

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

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

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

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