📜  Java FileInputStream类

📅  最后修改于: 2020-09-26 14:36:35             🧑  作者: Mango

在本教程中,我们将借助示例学习Java FileInputStream及其方法。

java.io包的FileInputStream类可用于从文件读取数据(以字节为单位)。

它扩展了InputStream抽象类。

Java FileInputStream is a subclass of InputStream class.

在学习FileInputStream之前,请确保了解Java文件。


创建一个FileInputStream

为了创建文件输入流,我们必须首先导入java.io.FileInputStream包。导入包后,就可以使用Java创建文件输入流。

1.使用文件路径

FileInputStream input = new FileInputStream(stringPath);

在这里,我们创建了一个输入流,该输入流将链接到path指定的文件。

2.使用文件的对象

FileInputStream input = new FileInputStream(File fileObject);

在这里,我们创建了一个输入流,该输入流将链接到fileObject指定的文件。


FileInputStream的方法

FileInputStream类提供InputStream类中存在的不同方法的实现。

read()方法

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

假设我们有一个名为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("Data in the file: ");

        // Reads the first byte
        int i = input.read();

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

           // Reads next byte from the file
           i = input.read();
        }
        input.close();
     }

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

输出

Data in the file:
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 {
         // Suppose, the input.txt file contains the following text
         // This is a line of text inside the file.
         FileInputStream input = new FileInputStream("input.txt");

         // Returns the number of available bytes
         System.out.println("Available bytes at the beginning: " + input.available());

         // Reads 3 bytes from the file
         input.read();
         input.read();
         input.read();

         // Returns the number of available bytes
         System.out.println("Available bytes at the end: " + input.available());

         input.close();
      }

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

输出

Available bytes at the beginning: 39
Available bytes at the end: 36

在上面的示例中,

  1. 我们首先使用available()方法检查文件输入流中可用字节的数量。
  2. 然后,我们使用了read()方法3次,以从文件输入流中读取3个字节。
  3. 现在,在读取字节之后,我们再次检查了可用字节。这次,可用字节减少了3。

skip()方法

要丢弃并跳过指定的字节数,可以使用skip()方法。例如,

import java.io.FileInputStream;

public class Main {

   public static void main(String args[]) {

      try {
         // Suppose, the input.txt file contains the following text
         // This is a line of text inside the file.
         FileInputStream input = new FileInputStream("input.txt");

         // Skips the 5 bytes
         input.skip(5);
         System.out.println("Input stream after skipping 5 bytes:");

         // Reads the first byte
         int i = input.read();
         while (i != -1) {
            System.out.print((char) i);

            // Reads next byte from the file
            i = input.read();
         }

         // close() method
         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的其他方法
Methods Descriptions
finalize() ensures that the close() method is called
getChannel() returns the object of FileChannel associated with the input stream
getFD() returns the file descriptor associated with the input stream
mark() mark the position in input stream up to which data has been read
reset() returns the control to the point in the input stream where the mark was set

要了解更多信息,请访问Java FileInputStream(官方Java文档)。