1. 程式人生 > 其它 >Java的io初體驗

Java的io初體驗

技術標籤:Java的IOjava

Java IO初體驗,今天學了java.io的內容,我總結了以下的知識:
1.我們輸入指的是 外存檔案上的內容 輸入到記憶體中,稱為輸入input 或者寫入read
2.我們輸出指的是 將記憶體中的資料內容寫入到外存儲存到相應的檔案中,稱為輸出output或者寫出write
3.當我們進行輸入輸出的時候:
主要用到的介面為 InputStream ,OutputStream, Reader, Writer
其中Stream結尾的為位元組流 , Reader,Writer為字元流,我們要清楚我們的位元組流一次只能讀取8為二進位制位的位元組資料,但是我們的字元流就是一次讀取是以字元為單位,也就是說我們的資料可能是兩個位元組的字元,可能是一個位元組的字元,我們都是以字元為單位的輸入輸出,一次讀取一個字元

4.我們的輸入輸出都有異常的處理,並且在用完流後都要關閉流進行資源釋放,跟我們資料庫的連結一樣,都要進行資源的釋放

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屬性來進行讀寫,應該用返回值判斷讀入的位元組數量來進行操作,否則可能會有最後一次的陣列未讀滿,但是錯誤的將上次讀後的內容未被覆蓋也進行了操作,所以這是我們應該注意的一點。