JAVA I/O小結(三)——位元組流輸入輸出
看此篇博文前推薦看看這篇幾篇,有助于了解File類的各種方法和遞回遍歷方式
傳送門:
JAVA I/O小結(一)——File類
JAVA I/O小結(二)——File類的遞回遍歷
I/O的分類
根據資料的流向區分:輸入流 和 輸出流
根據資料的型別區分:位元組流(8bit) 和 字符流(16bit)
由此可得出如下表格:
| 位元組流 | 字符流 | |
|---|---|---|
| 輸入流 | InputStream | Reader |
| 輸出流 | OutputStream | Writer |
在這章就主要講解下位元組流的輸入輸出
注意1:對I/O進行操作需要進行例外的拋出或者跳過,使用“throws”或者“try-catch”來處理例外
注意2:使用完I/O流后一定要關閉I/O流,遵循先開后關,后開先關的原則
位元組流輸入InputStream
這里的輸入,是指從硬碟里的檔案輸入到記憶體中,可以理解為從檔案中將資料輸入到代碼里,是檔案對代碼的輸入
在讀取操作中使用的read方法,在讀取到資料末尾沒有資料的時候會回傳“-1”,所以可以進行一下讀取操作,檔案使用的是前幾章所創建的檔案,
具體操作代碼如下:
try {
FileInputStream in = new FileInputStream("./test123.txt");//指定從test123輸入資料
byte[] bytes = new byte[15];//讀取陣列的大小
int len = 0;//設定讀取資料的長度
while(( len= in.read(bytes)) != -1){//這里先將讀出的長度存入len,在判斷read回傳的資料是否為-1
//System.out.println(len);//這里可以看到讀取在回圈內的len值,為資料的總位元組長度
System.out.println(new String(bytes,0,len));//new String(緩沖資料的陣列,起始位,長度)
}
//System.out.println(len);//這里可以看到最終len的值,為-1
in.close();//使用完一定要關閉流,一定!
} catch (Exception e) { //因為例外很多,所以用Exception
e.printStackTrace();
}
結果:

這里的結果并未向所展示代碼中那樣注釋了“len”輸出,可以看到“len”在while回圈內輸出的值為12,在回圈外輸出值為-1,因為在UTF-8編碼中,一個中文字符占三個位元組,所以阿巴阿巴 的長度輸出為12個位元組,
位元組流輸出OutputStream
這里的輸出,是指從記憶體輸出到硬碟里的檔案中,可以理解為從代碼中將資料輸出到檔案里,是代碼對檔案的輸出
相比輸入而言,輸出就顯得簡單許多,要注意先“write”存到記憶體中,再“flush”寫到硬碟里
代碼如下:
try {
FileOutputStream out = new FileOutputStream("./test123.txt");//制定從test123輸出資料,默認覆寫寫入,寫入true為接在之前資料的后面繼續寫入
String str = "瑪卡巴卡";
out.write(str.getBytes());//把資料寫到記憶體中
out.flush();//把記憶體的資料刷寫到硬碟
out.close();//使用完一定要關閉流
} catch (Exception e) {//因為例外很多,所以用Exception
e.printStackTrace();
}
結果:

這里就可以看到檔案內資料被覆寫寫入,從阿巴阿巴修改為瑪卡巴卡
如有問題歡迎指正
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278172.html
標籤:其他
