Java的io初體驗
Java IO初體驗,今天學了java.io的內容,我總結了以下的知識:
1.我們輸入指的是 外存檔案上的內容 輸入到記憶體中,稱為輸入input 或者寫入read
2.我們輸出指的是 將記憶體中的資料內容寫入到外存儲存到相應的檔案中,稱為輸出output或者寫出write
3.當我們進行輸入輸出的時候:
主要用到的介面為 InputStream ,OutputStream, Reader, Writer
其中Stream結尾的為位元組流 , Reader,Writer為字元流,我們要清楚我們的位元組流一次只能讀取8為二進位制位的位元組資料,但是我們的字元流就是一次讀取是以字元為單位,也就是說我們的資料可能是兩個位元組的字元,可能是一個位元組的字元,我們都是以字元為單位的輸入輸出,一次讀取一個字元
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class dateTest{
public static void main(String[] args) {
FileInputStream fis =null;
FileOutputStream fos= null;
try {
fis=new FileInputStream("test.txt");
System.out.println(fis.available());
fos =new FileOutputStream("a.txt");
byte[] bytes=new byte[4];
int dateLine=0;
while ((dateLine=fis.read(bytes)) != - 1){
String str=new String(bytes,0,dateLine);
System.out.println(str);
fis.skip(2);
fos.write(bytes ,0,dateLine);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
如上圖的程式碼所示:
我們對檔案test.txt建立了位元組輸入流,對檔案a.txt建立了位元組輸出流,然後將test.txt中的內容讀取到a.txt檔案中
avaliable方法是查找出輸入檔案中還有多少位元組的資料沒有讀入
skip方法是跳過多少個位元組的資料
控制檯輸出:
test.txt檔案內容:
a.txt檔案的內容:
重點來了:
我們利用read 和write方法有陣列元素未讀滿時的覆蓋的問題:
比如我們定義了一個byte陣列長度為4的時候,我們讀取abcdef內容,我們第一次讀取如下如圖所示,
第一次讀取:
第二次讀取:
我們注意到我們第二次的讀取沒有讀滿陣列,但是我們第一次讀入的陣列中後兩個元素沒有被覆蓋掉,所以還是存留在記憶體陣列中,所以我們用read方法要注意返回值是此次讀入的位元組數量,我們不能用陣列的length屬性來進行讀寫,應該用返回值判斷讀入的位元組數量來進行操作,否則可能會有最後一次的陣列未讀滿,但是錯誤的將上次讀後的內容未被覆蓋也進行了操作,所以這是我們應該注意的一點。