1. 程式人生 > >_053_FileOutPutStream位元組輸出流

_053_FileOutPutStream位元組輸出流

=======================

FileOutPutStream 1 找到目標檔案 2 建立資料的輸出通道 3 把資料轉換成位元組陣列寫出 4 關閉資源

輸出位元組流: public abstract class OutPutStream-此抽象類是表示位元組輸入流的所有類的父類 且是抽象類,必須要用它的子類建立物件,我們要寫檔案,那麼就是FileOutPutStream

方法:  void    write(byte[] b)            將 b.length 個位元組從指定 byte 陣列寫入此檔案輸出流中。  void    write(int b)            將指定位元組寫入此檔案輸出流。  void    write(byte[] b, int off, int len)            將指定 byte 陣列中從偏移量 off 開始的 len 個位元組寫入此檔案輸出流

建構函式 FileOutputStream(File file)            建立一個向指定 File 物件表示的檔案中寫入資料的檔案輸出流。 FileOutputStream(File file, boolean append)            建立一個向指定 File 物件表示的檔案中寫入資料的檔案輸出流。第二個引數為true時,則將位元組寫到檔案末尾處,不清空           每次建立一個FileOutputStream物件,那麼指標就會指到檔案開頭的位置,那麼每次都會覆蓋前面的內容,而我們如果加了true           那麼就代表指標始終在檔案的末尾

注意:  1 使用FileOutputStream建立物件的時候,如果File檔案不存在,就是說a.txt不存在,那麼會自動建立  如果檔案存在則會把裡面的內容會清空,要想裡面的內容不清空,需要把FileOutputStream建構函式的  第二個引數填寫成true    2 檔案末尾處,表示的是游標所在的末尾處,如果我們在a.txt裡面輸入回車,那麼再執行下面的程式碼,就是從回車處開始寫資料    3 使用FileOutputStream的write方法寫資料的時候,雖然接受的是int型別的資料,但是真正寫出的  只是一個位元組的資料,只是把低八位的二進位制資料寫出,其它二十四位全部拋棄,低8位也就是一個位元組。  也就是說,如果是這樣寫fou1.write('我');一個漢字是佔2個位元組的,也就是說,有一半資料被切割了,所以我們輸出後看到的是亂碼  讀取也是一個道理,每次只讀一個位元組,讀漢字當然亂碼。    4 但是如果用了data.getBytes()方法轉換後成的陣列就不一樣的,因為這時候是呼叫了這個方法void    write(byte[] b) ,所以可以寫出正常漢字

class Test
{
	public static void main(String[] args) throws IOException
	{
		test2();
	}

	public static void test1() throws IOException
	{
		File file1 = new File("D:\\a.txt");
		FileOutputStream fou1 = new FileOutputStream(file1);
		fou1.write('我');// 輸出是亂碼
		fou1.write(97);
		fou1.write(98);
		fou1.write(99);
		fou1.close();
	}

	public static void test2() throws IOException
	{
		File file1 = new File("D:\\a.txt");
		FileOutputStream fou1 = new FileOutputStream(file1, true);
		String data = "\r\n嗚嗚嗚嗚嗚";
		fou1.write(data.getBytes());
		fou1.close();
	}

}