模块  java.base
软件包  java.io

Class FileInputStream

  • 实现的所有接口
    CloseableAutoCloseable

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

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

    API Note:
    要释放此流使用的资源,应直接或通过try-with-resources调用close() 子类负责清理子类获取的资源。 应修改覆盖finalize()以执行清理的子类,以使用备用清理机制(如Cleaner并删除重写finalize方法。
    实现要求:
    如果此的FileInputStream已经子类和close()方法已被重写,该close()时的FileInputStream不可达的方法将被调用。 否则,具体实现如何执行close()描述的资源清理。
    从以下版本开始:
    1.0
    另请参见:
    FileFileDescriptorFileOutputStreamFiles.newInputStream(java.nio.file.Path, java.nio.file.OpenOption...)
    • 构造方法摘要

      构造方法  
      构造器 描述
      FileInputStream​(File file)
      通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File对象 file命名。
      FileInputStream​(FileDescriptor fdObj)
      使用文件描述符 fdObj创建 FileInputStream ,该文件描述符表示与文件系统中实际文件的现有连接。
      FileInputStream​(String name)
      通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name命名。
    • 构造方法详细信息

      • FileInputStream

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

        首先,如果有安全管理器,则使用name参数作为其参数调用其checkRead方法。

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

        参数
        name - 与系统相关的文件名。
        异常
        FileNotFoundException - 如果文件不存在,则是目录而不是常规文件,或者由于某些其他原因无法打开进行读取。
        SecurityException - 如果存在安全管理器且其 checkRead方法拒绝对该文件的读访问权。
        另请参见:
        SecurityManager.checkRead(java.lang.String)
      • FileInputStream

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

        首先,如果有安全管理器,则调用其checkRead方法,并将file参数表示的路径作为其参数。

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

        参数
        file - 要打开以供阅读的文件。
        异常
        FileNotFoundException - 如果文件不存在,则是目录而不是常规文件,或者由于某些其他原因无法打开进行读取。
        SecurityException - 如果存在安全管理器且其 checkRead方法拒绝对该文件的读访问权。
        另请参见:
        File.getPath()SecurityManager.checkRead(java.lang.String)
      • FileInputStream

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

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

        如果fdObj为null,则抛出NullPointerException

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

        参数
        fdObj - 要打开以供阅读的文件描述符。
        异常
        SecurityException - 如果存在安全管理器且其 checkRead方法拒绝对文件描述符的读访问权。
        另请参见:
        SecurityManager.checkRead(java.io.FileDescriptor)
    • 方法详细信息

      • read

        public int read()
                 throws IOException
        从此输入流中读取一个字节的数据。 如果尚未提供输入,此方法将阻止。
        Specified by:
        read在类 InputStream
        结果
        数据的下一个字节,如果到达文件的末尾, -1
        异常
        IOException - 如果发生I / O错误。
      • read

        public int read​(byte[] b)
                 throws IOException
        从此输入流b.length最多b.length个字节的数据读入一个字节数组。 此方法将阻塞,直到某些输入可用。
        重写:
        readInputStream
        参数
        b - 读取数据的缓冲区。
        结果
        读入缓冲区的总字节数,如果由于文件末尾已到达而没有更多数据, -1
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        InputStream.read(byte[], int, int)
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws IOException
        从此输入流len最多len字节的数据读入一个字节数组。 如果len不为零,则该方法将阻塞,直到某些输入可用; 否则,不读取任何字节,返回0
        重写:
        read在类 InputStream
        参数
        b - 读取数据的缓冲区。
        off - 目标阵列 b的起始偏移量
        len - 读取的最大字节数。
        结果
        读入缓冲区的总字节数,如果由于文件末尾已到达而没有更多数据, -1
        异常
        NullPointerException - 如果 bnull
        IndexOutOfBoundsException - 如果 off为负数, len为负数,或者 len为大于 b.length - off
        IOException - 如果发生I / O错误。
        另请参见:
        InputStream.read()
      • skip

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

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

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

        重写:
        skipInputStream
        参数
        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
        关闭此文件输入流并释放与该流关联的所有系统资源。

        如果此流具有关联的频道,则该频道也将关闭。

        Specified by:
        close在界面 AutoCloseable
        Specified by:
        close ,界面 Closeable
        重写:
        close在类 InputStream
        API Note:
        仅当直接调用或通过try-with-resources调用时,覆盖close()才能执行清理操作是可靠的。 不要依赖于最终化来调用close ; 最终确定不可靠并且已被弃用。 如果需要清理本机资源,则应使用其他机制,如Cleaner
        异常
        IOException - 如果发生I / O错误。
      • getFD

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

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

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

        结果
        与此文件输入流关联的文件通道
        从以下版本开始:
        1.4
      • finalize

        @Deprecated(since="9",
                    forRemoval=true)
        protected void finalize()
                         throws IOException
        Deprecated, for removal: This API element is subject to removal in a future version.
        The finalize method has been deprecated and will be removed. Subclasses that override finalize in order to perform cleanup should be modified to use alternative cleanup mechanisms and to remove the overriding finalize method. When overriding the finalize method, its implementation must explicitly ensure that super.finalize() is invoked as described in Object.finalize(). See the specification for Object.finalize() for further information about migration options.
        确保在没有更多引用时调用此文件输入流的close()方法。 finalize()方法不直接调用close()
        重写:
        finalizeObject
        API Note:
        要释放此流使用的资源,应直接或通过try-with-resources调用 close()
        实现要求:
        如果此的FileInputStream已经子类和close()方法已被重写,该close()时的FileInputStream不可达的方法将被调用。 否则,具体实现如何执行close()描述的资源清理。
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        close()