在本教程中,我們將借助示例學(xué)習(xí)Java FileInputStream及其方法。
java.io包的FileInputStream類可用于從文件中讀取數(shù)據(jù)(以字節(jié)為單位)。
它繼承了InputStream抽象類。

在學(xué)習(xí)之前FileInputStream,請確保已經(jīng)了解Java File(文件)。
為了創(chuàng)建文件輸入流,我們必須首先導(dǎo)入java.io.FileInputStream包。導(dǎo)入包后,就可以使用Java創(chuàng)建文件輸入流。
1.使用文件路徑
FileInputStream input = new FileInputStream(stringPath);
在這里,我們創(chuàng)建了一個(gè)輸入流,該輸入流將鏈接到所指定的文件路徑。
2.使用文件的對象
FileInputStream input = new FileInputStream(File fileObject);
在這里,我們創(chuàng)建了一個(gè)輸入流,該輸入流將鏈接到由fileObject指定的文件。
FileInputStream類為InputStream類中出現(xiàn)的不同方法提供了實(shí)現(xiàn)。
read() - 從文件中讀取一個(gè)字節(jié)
read(byte[] array) - 從文件中讀取字節(jié)并存儲在指定的數(shù)組中
read(byte[] array, int start, int length) - 從文件中讀取等于length的字節(jié)數(shù),并從位置start開始存儲在指定的數(shù)組中
假設(shè)我們有一個(gè)名為input.txt的文件,其中包含以下內(nèi)容。
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("文件中的數(shù)據(jù): ");
//讀取第一個(gè)字節(jié)
int i = input.read();
while(i != -1) {
System.out.print((char)i);
//從文件中讀取下一個(gè)字節(jié)
i = input.read();
}
input.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}輸出結(jié)果
文件中的數(shù)據(jù): This is a line of text inside the file.
在上面的示例中,我們創(chuàng)建了一個(gè)名為input的文件輸入流。輸入流與input.txt文件鏈接。
FileInputStream input = new FileInputStream("input.txt");為了從文件中讀取數(shù)據(jù),我們在while循環(huán)中使用了read()方法。
要獲取可用字節(jié)數(shù),我們可以使用available()方法。例如,
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
//假設(shè)input.txt文件包含以下文本
//這是文件中的一行文本。
FileInputStream input = new FileInputStream("input.txt");
//返回可用字節(jié)數(shù)
System.out.println("開始時(shí)可用的字節(jié)數(shù): " + input.available());
//從文件中讀取3個(gè)字節(jié)
input.read();
input.read();
input.read();
//返回可用字節(jié)數(shù)
System.out.println("結(jié)束時(shí)的可用字節(jié)數(shù): " + input.available());
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}輸出結(jié)果
開始時(shí)可用的字節(jié)數(shù): 39 結(jié)束時(shí)的可用字節(jié)數(shù): 36
在以上示例中,
我們首先使用available()方法檢查文件輸入流中的可用字節(jié)數(shù)。
然后,我們已經(jīng)使用read()方法3次從文件輸入流中讀取3個(gè)字節(jié)。
現(xiàn)在,在讀取字節(jié)之后,我們再次檢查了可用字節(jié)。這次,可用字節(jié)減少了3。
要丟棄和跳過指定的字節(jié)數(shù),可以使用skip()方法。例如
import java.io.FileInputStream;
public class Main {
public static void main(String args[]) {
try {
//假設(shè)input.txt文件包含以下文本
//這是文件中的一行文本。
FileInputStream input = new FileInputStream("input.txt");
//跳過5個(gè)字節(jié)
input.skip(5);
System.out.println("輸入流跳過5個(gè)字節(jié):");
//讀取第一個(gè)字節(jié)
int i = input.read();
while (i != -1) {
System.out.print((char) i);
//從文件中讀取下一個(gè)字節(jié)
i = input.read();
}
// close() 方法
input.close();
}
catch (Exception e) {
e.getStackTrace();
}
}
}輸出結(jié)果
輸入流跳過5個(gè)字節(jié): is a line of text inside the file.
在上面的示例中,我們使用了skip()方法從文件輸入流中跳過5個(gè)字節(jié)的數(shù)據(jù)。因此,不會從輸入流中讀取表示文本“ This”的字節(jié)。
要關(guān)閉文件輸入流,可以使用close()方法。一旦close()方法被調(diào)用,我們就不能使用輸入流來讀取數(shù)據(jù)。
在以上所有示例中,我們都使用了close()方法來關(guān)閉文件輸入流。
| 方法 | 內(nèi)容描述 |
|---|---|
| finalize() | 確保close()方法被調(diào)用 |
| getChannel() | 返回FileChannel與輸入流關(guān)聯(lián)的對象 |
| getFD() | 返回與輸入流關(guān)聯(lián)的文件描述符 |
| mark() | 標(biāo)記輸入流中已讀取數(shù)據(jù)的位置 |
| reset() | 將控件返回到輸入流中設(shè)置了標(biāo)記的點(diǎn) |