1. 程式人生 > >java IO流的一些零碎知識點

java IO流的一些零碎知識點

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);
	}
}