java.io
包的FileInputStream
类可用于从文件读取数据(以字节为单位)。
它扩展了InputStream
抽象类。
在学习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
在上面的示例中,
- 我们首先使用
available()
方法检查文件输入流中可用字节的数量。 - 然后,我们使用了
read()
方法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文档)。