Java FileInputStream 类使用说明及实例
FileInputStream 类可以以字节为单位从文件中读取数据。在本教程中,我们将通过示例了解 Java FileInputStream 及其用法。
java.io
包的 FileInputStream
类可以以字节为单位从文件中读取数据。在本教程中,我们将通过示例了解 Java FileInputStream 及其用法。
FileInputStream
类扩展了 InputStream
抽象类。
在了解之前 FileInputStream
,请首先了解一下Java 文件操作。
创建一个文件输入流
FileInputStream
类位于 java.io
包中,FileInputStream
类提供了 2 个构造方法用来创建文件输入流。如下所示:
- 使用文件路径
FileInputStream input = new FileInputStream(filePath);
在这里,我们创建了一个输入流,通过文件路径参数指定了输入流要操作的文件。
- 使用文件对象
File fileObject = new File(filePath);
FileInputStream input = new FileInputStream(fileObject);
在这里,我们通过文件对象作为参数创建了一个输入流。文件对象指向了要操作的文件。
FileInputStream 的方法
FileInputStream
类实现了的 InputStream
类中的定义的所有的抽象方法。
read() 方法
read()
- 从文件中读取一个字节read(byte[] array)
- 从文件中读取字节并存储在指定的数组中read(byte[] array, int start, int length)
- 读取从start
指定的开始的长度为length
的字节数到指定的数组中
假设我们有一个名为 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("文件中的内容: ");
// 读取第一个字节
int i = input.read();
while(i != -1) {
System.out.print((char)i);
// 读取下一个字节
i = input.read();
}
input.close();
} catch(Exception e) {
e.getStackTrace();
}
}
}
输出
文件中的内容: 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 {
// 这里还是以上面的文件为例
FileInputStream input = new FileInputStream("input.txt");
// 输出可用的字节数
System.out.println("Available bytes: " + input.available());
// 读取 3 个字节
input.read();
input.read();
input.read();
// 读取 3 个字节后,输出可用的字节数
System.out.println("Available bytes: " + input.available());
input.close();
} catch (Exception e) {
e.getStackTrace();
}
}
}
输出
Available bytes: 39
Available bytes: 36
在上面的例子中,
- 首先,我们使用
available()
方法来返回输入流中的可用字节数。 - 然后,我们使用了 3 次
read()
方法从输入流中读取 3 个字节。 - 最后,我们再次检查了可用字节。这次可用字节减少了 3 个。
skip() 方法
skip()
方法跳过指定数量的字节。例如,
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
// 这里还是以上面的文件为例
FileInputStream input = new FileInputStream("input.txt");
// 跳过 5 个字节
input.skip(5);
System.out.println("Input stream after skipping 5 bytes: ");
int i = input.read();
while (i != -1) {
System.out.print((char) i);
i = input.read();
}
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 的其他方法
方法 | 说明 |
---|---|
finalize() |
确保销毁对象的时候 close() 方法被调用 |
getChannel() |
返回与输入流相关联的 FileChannel 对象 |
getFD() |
返回与输入流关联的文件描述符 |
mark() |
标记输入流中已读取数据的位置 |
reset() |
将控制返回到输入流中设置标记的点 |