??? FileInputStream 類從文件中讀取數據。它有以下構造方法:?
??? FileInputStream(File file)--------參數file指定文件的數據源?
??? FileInputStream(String name)-------- 參數name指定文件數據源。在參數name中包含了文件路徑信息。?
??? 下面這個FileInputStreamTester類讀取test.txt文件中的內容。?
????? 假定在 test.txt文件中包含的字符串為"abc1好" ,并且假定文件所在的操作系統的默認字符編碼為GBK, 那么在文件中實際存放的是這5個字符的GBK 字符編碼, 字符"a"、"b"、"c"、 和 "1" 的GBK字符編碼各占一個字節,分別是97、98、99和49。“好”的GBK字符編碼占2個字節,為186和195。文件輸入流的read()方法每次讀取一個字節,因此以上程序打印的結果為:?
?
?? 如果文件很大,為了提高效率,可以使用read(byte[] buff)方法,它能減少物理文件的次數。下面這個UseBuffer類的main()方法把test.txt 中數據拷貝到out.txt中。在進行讀寫操作時,都使用了字節數組緩沖區,每次最多讀寫1024個字節。?
?? 如果test.txt文件與UseBuffer類的 .class 文件位于同一目錄下,也可以通過Class類的getResourceAsStream()方法來獲得輸入流,例如:?
? 以上方法的好處在于只提供test.txt文件的相對路徑。
??? FileInputStream(File file)--------參數file指定文件的數據源?
??? FileInputStream(String name)-------- 參數name指定文件數據源。在參數name中包含了文件路徑信息。?
??? 下面這個FileInputStreamTester類讀取test.txt文件中的內容。?
- package ?xiaohang.com;??
- ??
- import ?java.io.FileInputStream;??
- import ?java.io.IOException;??
- ??
- public ? class ?FileInputStreamTester?{??
- ???? public ? static ? void ?main(String[]?args)? throws ?IOException?{??
- ????????FileInputStream?in?=? new ?FileInputStream( "D:\\test.txt" );??
- ???????? int ?data;??
- ???????? while ?((data?=?in.read())?!=?- 1 )?{??
- ????????????System.out.println(data?+? "?" );??
- ????????}??
- ???????? //?關閉此文件輸入流并釋放與此流有關的所有系統資源 ??
- ????????in.close();??
- ????}??
- }??
????? 假定在 test.txt文件中包含的字符串為"abc1好" ,并且假定文件所在的操作系統的默認字符編碼為GBK, 那么在文件中實際存放的是這5個字符的GBK 字符編碼, 字符"a"、"b"、"c"、 和 "1" 的GBK字符編碼各占一個字節,分別是97、98、99和49。“好”的GBK字符編碼占2個字節,為186和195。文件輸入流的read()方法每次讀取一個字節,因此以上程序打印的結果為:?

?? 如果文件很大,為了提高效率,可以使用read(byte[] buff)方法,它能減少物理文件的次數。下面這個UseBuffer類的main()方法把test.txt 中數據拷貝到out.txt中。在進行讀寫操作時,都使用了字節數組緩沖區,每次最多讀寫1024個字節。?
- package ?xiaohang.com;??
- ??
- import ?java.io.FileInputStream;??
- import ?java.io.FileOutputStream;??
- import ?java.io.IOException;??
- ??
- public ? class ?UseBuffer?{??
- ???? public ? static ? void ?main(String[]?args)? throws ?IOException?{??
- ???????? final ? int ?SIZE= 1024 ;??
- ????????FileInputStream?in?=? new ?FileInputStream( "D:\\test.txt" );??
- ????????FileOutputStream?out?=? new ?FileOutputStream( "D:\\out.txt" );??
- ???????? //創建字節數組緩沖區 ??
- ???????? byte []?buff?=? new ? byte [SIZE];??
- ???????? //把test.txt文件中的數據讀入到buff中 ??
- ???????? int ?len?=?in.read(buff);??
- ???????? while ?(len!=- 1 )?{??
- ???????????? //把buff中的數據寫到out.txt文件中 ??
- ????????????out.write(buff,? 0 ,?len);??
- ???????????? //從新讀取輸入流,此時已到達輸入流的結尾 ??
- ????????????len=in.read();??
- ????????}??
- ????????in.close();??
- ????????out.close();??
- ????}??
- }??
?? 如果test.txt文件與UseBuffer類的 .class 文件位于同一目錄下,也可以通過Class類的getResourceAsStream()方法來獲得輸入流,例如:?
- InputStream?in?=?UseBuffer. class .getResourceAsStream( "test.txt" ); //適用于靜態方法或實例方法 ??
- //或者: ??
- InputStream?in?=? this .getClass().getResourceAsStream( "test.txt" );? //適用于實例方法 ??
? 以上方法的好處在于只提供test.txt文件的相對路徑。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
