java中的FileInputStream三種read()函數(shù)用法
FileInputStream流的三種read()函數(shù)對比
首先我們先創(chuàng)建FileIputStream流對文件進行讀取
public static void main(String[] args) throws IOException { //創(chuàng)建File對象,保存文件夾路徑iu File fin_floder = new File("C:\\test.txt"); //創(chuàng)建從文件讀取數(shù)據(jù)的FileInputStream流 FileInputStream fin = new FileInputStream(fin_floder);
1. int read( )函數(shù)
該函數(shù)的返回值為int數(shù)值,表示讀取的字符對應的ascii碼,當返回為-1表示讀取到文件末尾;
//順序讀取到文件末尾 int temp = 0; while( (temp = fin.read()) != -1) { System.out.print(temp+" "); //打印read()返回值 System.out.printf("%c",temp); //打印ascii碼對應的字符 System.out.println(); //換行 }
讀取 hello,world 文本文檔的結(jié)果:
2. read( byte [ ] )
返回讀入緩沖區(qū)的字節(jié)總數(shù),到末尾返回-1
int size = fin.available(); //返回文件的總字節(jié)數(shù) byte[] b = new byte[size]; //生成緩存用于存放讀入的字節(jié) System.out.println(fin.read(b)); String str = new String(b); //將字節(jié)數(shù)組轉(zhuǎn)化為字符串 System.out.println(str);
讀取 hello,world 文本文檔的結(jié)果:數(shù)值 11
3. read(byte[ ] ,int off ,int len)
off表示目標數(shù)組b中的起始偏移量,也就是從第幾個下標開始寫入數(shù)組,len表示寫入數(shù)組的長度;
int size = fin.available(); byte[] b = new byte[size]; fin.read(b,2,5); //從數(shù)組的的第三個元素開始寫入,寫五個字節(jié)長度 String str = new String(b); //字節(jié)數(shù)組轉(zhuǎn)化為字符串 System.out.println(str);
輸出結(jié)果為:
FileInputStream中的read()方法
首先這是我自己寫代碼的時候遇到的一個問題,我思來想去,終于想通透了,所以想分享給大家,當然這也是一個非常簡單的問題。
public class IO_InputStream public static void main(String[] args){//需要導包的,圖方便我就不寫了 //1.new一個FileInputStream對象 FileInputStream fis = new FileInputStream("chifan.next)) ; //例如這個文本里面我放了1234567共7個字符,下面開始讀取文件 while(fis.read() != -1){ System.out.print( char)fis.read() ); //將read()方法調(diào)用后返回值為int類型強制轉(zhuǎn)換為字符,以便打印 } //但是打印結(jié)果就是:246,隔一個打印一個,我感到疑惑 //后來我左思右想發(fā)現(xiàn)我在while的執(zhí)行語句塊里面的打印方法又調(diào)用了一次read()方法,導致打印的其實是每次讀取兩個字符后,只會打印每兩個的最后一個字符,如果我們在123456后面再一個7,那么最后打印的就是一個?如何解決呢?就是我們不要在執(zhí)行語句塊里面出現(xiàn)read()方法 int len; while(len=fis.read() != -1){ System.out.print( char)len); } //這樣結(jié)果就一致了
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談Spring AOP中args()和argNames的含義
這篇文章主要介紹了Spring AOP中args()和argNames的含義,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07基于springboot+jwt實現(xiàn)刷新token過程解析
這篇文章主要介紹了基于springboot+jwt實現(xiàn)刷新token過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03