• Tags , ,
  •         
  • www.breakyizhan.com
  •    

    Java中的Java.io.FileInputStream类

    FileInputStream对于以字节序列的形式从文件中读取数据很有用。FileInputStream用于读取诸如图像数据等原始字节流。为了读取字符流,请考虑使用FileReader。

    构造函数和说明

    • FileInputStream(File file):创建一个输入文件流以从指定的File对象中读取。
    • FileInputStream(FileDescriptor fdobj):创建输入文件流以从指定的文件描述符中读取。
    • FileInputStream(String name):创建一个输入文件流,以从具有指定名称的文件读取。

    重要方法:

    • int read():从此输入流中读取一个字节的数据。
      语法: public int read()
               throws IOException
      返回:数据的下一个字节,如果到达文件的末尾,则返回 -1。
      抛出: 
      IOException
    • int read(byte [] b):从此输入流中将b.length个字节的数据读入一个字节数组。
      语法: public int read(byte [] b)
               throws IOException
      参数:
       b  - 读取数据的缓冲区。
      返回:读入缓冲区的总字节数,或-1。
      抛出: 
      IOException
    • int read(byte [] b,int off,int len):从此输入流中将len个字节的数据读入一个字节数组。
      语法: public int read(byte [] b,
             int off,
             int len)
               throws IOException
      参数:
       b  - 读取数据的缓冲区。
      off  - 目标数组中的起始偏移量b
      len  - 读取的最大字节数。
      返回:读入缓冲区的总字节数,或-1 
       抛出:
      NullPointerException
      IndexOutOfBoundsException
    • long skip(long n):跳过并丢弃输入流中的n个字节的数据。
      语法: public long skip(long n)
                throws IOException
      参数:
       n  - 要跳过的字节数。
      返回:跳过的实际字节数。
      抛出:
       IOException
    • int available():返回可从此输入流中读取(或跳过)的剩余字节数的估计值。
      语法: public int available()
                    throws IOException
      返回:可读取的剩余字节数的估计值 
       抛出:
       IOException
    • void close():关闭此文件输入流并释放与该流关联的所有系统资源。
      语法: public void close()
                 throws IOException
      指定者:
      在AutoCloseable接口中关闭
      覆盖:
      在类InputStream中关闭
      抛出: 
      IOException
    • FileDescriptor getFD():返回FileDescriptor对象,该对象表示与此FileInputStream使用的文件系统中的实际文件的连接。
      语法: public final FileDescriptor getFD()
                                 throws IOException
      返回:与此流关联的文件描述符对象。
      抛出: IOException
    • FileChannel getChannel():返回与此文件输入流关联的唯一FileChannel对象。
      语法: public FileChannel getChannel()
       返回:与此文件输入流关联的文件通道
    • void finalize():确保在没有更多引用时调用此文件输入流的close方法。
      语法: protected void finalize()
                       throws IOException
      覆盖:在类Object中finalize
       抛出: IOException

    使用FileInputStream从文件中读取数据的步骤

    • 首先,将文件附加到FileInputStream,如下所示:
      FileInputStream fileInputStream = new FileInputStream(“file.txt”);
    • 这将使我们能够从文件中读取数据。然后,要从文件中读取数据,我们应该从FileInputStream读取数据为;
      CH = fileInputStream.read();

      当没有更多的数据可供读取时,read()方法返回-1;

    • 然后我们应该将监视器附加到输出流。为了显示数据,我们可以使用System.out.print。
      System.out.print(CH);

    执行:

    import java.io.*;
    //Java program demonstrating FileInputStream 
    class ReadFile
    {
        public static void main(String args[]) throws IOException
        {
    
            //attach the file to FileInputStream
            FileInputStream fin= new FileInputStream("file1.txt");
    
            //illustrating getChannel() method
            System.out.println(fin.getChannel());
    
            //illustrating getFD() method
            System.out.println(fin.getFD());
    
            //illustrating available method
            System.out.println("Number of remaining bytes:"+fin.available());
    
            //illustrating skip method
            /*Original File content:
            * This is my first line
            * This is my second line*/
            fin.skip(4);
            System.out.println("FileContents :");
            //read characters from FileInputStream and write them
            int ch;
            while((ch=fin.read())!=-1)
                System.out.print((char)ch);
            
            //close the file
            fin.close();
        }
    }
    

    输出:

    sun.nio.ch.FileChannelImpl@1540e19d
    java.io.FileDescriptor@677327b6
    Number of remaining bytes:45
    FileContents :
     is my first line
    This is my second line

    BufferedInputStream可用于从文件中一次读取一个充满数据的缓冲区。这提高了执行速度。

     
    转载请保留页面地址:https://www.breakyizhan.com/java/4306.html