java IO流的一些零碎知識點
阿新 • • 發佈:2018-12-08
1,字元輸入流要想以追加模式寫入資料,有兩種方法,一種是把FileWriter的第二個引數寫成true,另外一種就是使用append方法進行追加,這兩種方法的區別就是append方法可以動態的選擇追加內容,但是改變引數這個方法只能保持一種輸入值不變。
而位元組輸入流OutputStream只有一種追加方法,就是把FileOutputStream的第二個引數寫成true。
還有一點就是字元輸入流可以直接把要輸入的字串進行直接輸入,不需要中間的換種陣列。如:writer.write(str);
字元流和位元組流還有一點區別就是:位元組流是對檔案本身的直接操作,不需要通過緩衝區,而字元流則要通過緩衝流來操作檔案。意思就是說使用位元組流時就算沒有執行close方法關閉位元組流的操作,還是可以向檔案輸出內容,但是在字元流中,若不執行close方法,就無法性檔案寫內容。可以寫個Demo嘗試一下。字元流之所以必須呼叫close是因為,字元流在執行過程中引入了緩衝區機制,即寫操作先將內容放入緩衝區,若寫操作完畢後,不將緩衝區內容重新整理到檔案的話,檔案將為空。(我對這裡有一個疑問:如果待寫入的資料比較大,超過了緩衝區的限制,那會不會報錯
位元組輸入流:
import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class TestDemo{ public static void main(String args[]) { File file=new File("E:"+File.separator+"testdemo1","file.txt"); String str="何時了,往事知多少,小樓昨夜又東風"; OutputStream output=null; byte b[]=str.getBytes(); try { output=new FileOutputStream(file,true); output.write(b); output.close(); }catch(Exception e) { e.printStackTrace(); } } }
字元輸入流:
import java.io.File; import java.io.FileReader; import java.io.Writer; import java.io.FileWriter; import java.io.Reader; public class TestDemo{ public static void main(String args[]) { File file=new File("E:"+File.separator+"testdemo1","file.txt"); String str="床前明月光,疑是地上霜"; Reader reader=null; Writer writer=null; int temp=0; int len=0; char c[]=new char[(int)file.length()]; try { writer=new FileWriter(file,true); writer.write(str); //writer.append("中華人民共和國"); reader=new FileReader(file); while((temp=reader.read())!=-1) { c[len]=(char)temp; len++; } writer.close(); reader.close(); }catch (Exception e) { e.printStackTrace(); } System.out.println(c); } }