閱讀312 返回首頁    go 阿裏雲 go 技術社區[雲棲]


IO學習筆記(一)

一、對文件的寫操作

1.  FileWriter對象

FileWriter  fw = new FileWriter("XXX");

隻要對文件進行IO操作,就會有IOException異常。

創建一個FileWriter對象,該對象一初始化,必須要明確要操作的文件。

而且如果在該目錄下如果存在與指定文件同名的文件,那麼同名文件將被覆蓋。

在用FileWriter對象寫文件的時候,數據是被寫到了緩衝中,所以要flush()。

當我們調用flush()方法時,FileWriter對象沒有被關閉,我們可以繼續向其中寫數據。

調用FileWriter對象的close()方法前,會默認的自動調用flush()方法,但是調用close()方法後,將不能再進行寫操作。

2.   對IO操作的異常的處理方式

 在try外創建引用,在try內進行初始化,對FileWriter對象的關閉要在finally中執行,並且要加入不等於空的判斷,防止文件找不到異常。

3.   利用FileWriter進行文件的續寫

查閱JDK後我們發現在FileWriter的構造函數FileWriter(String fileName, boolean append) 對文件的續寫給予了支持。

在文件續寫時要注意的一個問題是:在Windows下的換行 \r\n  在linux下為\n

二、對文件的讀操作

4.   FileReader對象

FileReader fr = new FileReader("XXX");

fr.read();一個字符一個字符的讀取即讀取單個字符,每次返回的是一個字符,但是整形的,需要我們強製的轉換成char。

fr.read(c);------read(char[] cbuf)   將讀到的字符放入數組

fr.read(c,0,len);------read(char[] cbuf, int off, int len) 將字符讀入數組的某一部分

讀到文件的末尾會返回-1

5.   文件的拷貝(簡寫)

FileWriter fw = new FileWriter("xxx");

FileReader fr = new FileReader("xxxx");

char[] buf = new char[1024];
int len = 0 ;

while ((len = fr.read(buf))) {

      fw.write(buf,0,len);

}
fw.close();

fr.close();

6.   BufferWriter---BufferedReader

緩衝區的出現是為了提高流的操作效率,在緩衝區創建之前必須有流對象

BufferedWriter(Writer out)

BufferedWriter(Writer out, int sz)

BufferedWriter中多了一個newLine()的方法。

BufferedReader中出現了一個新的方法,readLine(),一次讀一行的方法包含改行內容的字符串,不包含任何行終止符,如果已到達流的末尾,則返回null.

BufferedReader(Reader in)
BufferedReader(Reader in, int sz)

文件拷貝實現-----(一)

BufferedWriter bufw = new BufferedWriter(new FileWriter("D:\\a.txt"));

BufferedReader bufr = new BufferedReader(new FileReader("d:\\copy.txt"));
String str = null;
while ((str = bufr.readLine()) != null) {
      bufw.write(str);
      bufw.newLine();
      bufw.flush();
}

文件拷貝實現-----(二)

FileWriter fw = new FileWriter("A.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("aaaaaaaccc");
bufw.flush();

7.  readLine()方法的實現原理



8.  裝飾設計模式的應用
當已有類的方法不能滿足我們的需求的時候,我們可以采用裝飾設計模式來對我們已有的對象進行增強,這裏要注意是對對象的增強,如何對對象進行增強呢?我們可以定義一個新的類,然後在這個類中通過構造方法中傳入原來的對象,基於已有的功能,並提供加強功能,那麼自定義的類稱為裝飾類。在IO操作中,BufferedWriter 就是采用了裝飾設計模式。


9.  FileInputStream FileOutputStream 

采用字節的方式對文件進行操作,在對圖片、聲音、視頻等文件操作的時候就必須采用字節的方式對文件進行讀取。其操作與字符流的操作基本一致,隻是中間存放數據的數組發生了變化,由原來的字符數組變成了字節數組。

FileInputStream fi = new FileInputStream("D:\\1.jpg");
FileOutputStream fo = new FileOutputStream("D:\\2.jpg");
        byte[] b = new byte[1024];
int len = 0;
while ((len=fi.read(b))!=-1) 
{
fo.write(b,0,len);
}


10.  BufferedInputStream(InputStream in)   BufferedOutputStream(OutputStream out)

實現緩衝的輸入輸出流,與字符緩衝的輸入輸出流類似,都是在底層實現了數組,所以我們在使用的時候也不需要字節手動去創建字節數組,直接用就可以。

FileInputStream fi = new FileInputStream("D:\\1.jpg");
FileOutputStream fo = new FileOutputStream("D:\\2.jpg");
        BufferedOutputStream bufo = new BufferedOutputStream(fo);
BufferedInputStream bufi = new BufferedInputStream(fi);
int len = 0;
while ((len=bufi.read())!=-1) 
{
bufo.write(len);
}


最後更新:2017-04-02 06:51:53

  上一篇:go 使用PureMVC設計Swing 應用程序
  下一篇:go android獲得mac和ip .