在本教程中,我們將借助示例學(xué)習(xí)Java FileInputStream及其方法。
java.io包的FileInputStream類可用于從文件中讀取數(shù)據(jù)(以字節(jié)為單位)。
它繼承了InputStream抽象類。
在學(xué)習(xí)之前FileInputStream,請(qǐng)確保已經(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.使用文件的對(duì)象
FileInputStream input = new FileInputStream(File fileObject);
在這里,我們創(chuàng)建了一個(gè)輸入流,該輸入流將鏈接到由fileObject指定的文件。
FileInputStream類為InputStream類中出現(xiàn)的不同方法提供了實(shí)現(xiàn)。
read() - 從文件中讀取一個(gè)字節(jié)
read(byte[] array) - 從文件中讀取字節(jié)并存儲(chǔ)在指定的數(shù)組中
read(byte[] array, int start, int length) - 從文件中讀取等于length的字節(jié)數(shù),并從位置start開始存儲(chǔ)在指定的數(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ù),我們?cè)趙hile循環(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é)之后,我們?cè)俅螜z查了可用字節(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ù)。因此,不會(huì)從輸入流中讀取表示文本“ 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)的對(duì)象 |
getFD() | 返回與輸入流關(guān)聯(lián)的文件描述符 |
mark() | 標(biāo)記輸入流中已讀取數(shù)據(jù)的位置 |
reset() | 將控件返回到輸入流中設(shè)置了標(biāo)記的點(diǎn) |