天天看點

IO流使用時候的小插曲

IO字元讀入流:BufferedReader()
IO字元寫入流:BufferedWriter()
           

在定義IO流的時候我們時常會用到對一個檔案追加寫入,這時候我們都知道定義寫入流的時候:

BufferedWriter bw = new BufferedWriter(new FildWriter(檔案名),true) ;

這樣寫入的時候就可以直接對檔案進行追加内容。

可是有時候會需要實作把檔案内容讀入出來修改後,再次重新寫入内容。

讀入檔案内容我們常常會用一個循環來周遊:

BufferdReader br = new BufferdReader(new FildReader(檔案名));
BufferedWriter bw = new BufferedWriter(new FildWriter(檔案名)) ;

arraylist list = new arraylist();
String str;
while(true){
if((str =bw.readLine())!=null)
	  list.add(str);
}
for(Object object:list)
{
 bw.writer(object);
}
bw.writer("bbbb")
  bw.close();
  br.close(); 
           

此刻寫入檔案的内容隻有一條bbbb! 這是為什麼呢?

因為在建立寫入流對象的時候,沒有對其使用追加方式,将會立即重新整理清空檔案内容,此刻檔案在讀入内容為空,是以隻會執行循環體外的一條寫入語句。主要錯誤的原因是因為有的朋友認為隻有在執行bw.writer()的時候才會開始對檔案之前内容清空,而事實是在建立對象的時候就已經開始。是以隻需要把寫入流對象建立正在讀取完成以後即可。

BufferdReader br = new BufferdReader(new FildReader(檔案名));
  arraylist list = new arraylist();
String str;
while(true){
if((str =bw.readLine())!=null)
	list.add(str);
}
BufferedWriter bw = new BufferedWriter(new FildWriter(檔案名)) ;
for(Object object:list)
{
 bw.writer(object);
}
bw.writer("bbbb")
  bw.close();
  br.close(); 
           

此刻在建立寫入流之前,檔案内容已經被讀取并且添加到list集合裡面。然後可以對其操作後在從新寫入檔案。

繼續閱讀