Java 之 字節輸出流[OutputStream]


一、字節輸出流

  java.io.OutputStream 抽象類是表示字節輸出流的所有類的超類,將指定的字節信息寫出到目的地。

  該類中定義了字節輸出流的基本共性功能方法。

  公性方法:

public void close() :關閉此輸出流並釋放與此流相關聯的任何系統資源。
public void flush() :刷新此輸出流並強制任何緩沖的輸出字節被寫出,調用此方法指示應將這些字節立即寫入它們預期的目標。
public void write(int b):將指定的字節寫入此輸出流。write 的常規協定是:向輸出流寫入一個字節。要寫入的字節是參數 b 的八個低位。b 的 24 個高位將被忽略。 即寫入0~255范圍 public void write(byte[] b) :將 b.length字節從指定的字節數組寫入此輸出流。 public void write(byte[] b, int off, int len) :從指定的字節數組寫入 len字節,從偏移量 off開始輸出到此輸出流。

  注意:close 方法,當完成流的操作時,必須調用此方法,釋放系統資源。

   擴展

   節點流:節點流可以從一個特定的數據源(節點)讀寫數據(如:文件,內存)

   處理流:處理流是“連接在已存在的流(節點流或者處理流)之上,通過對數據的處理為程序提供更為強大的讀寫功能。

 

  java.io.OutputStream 該為作為一個抽象類,下面有很多的子類。

  

   圖中深色的為節點流,淺色的為處理流。

二、FileOutputStream 類

  java.io.FileOutputStream 類是文件輸出流,用於將數據寫出到文件,是 OutputStream 最簡單的一個子類。

  1、構造方法

 FileOutputStream(String name)創建一個向具有指定名稱的文件中寫入數據的輸出文件流。
 FileOutputStream(File file) 創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。

    參數:寫入數據的目的地。

      String name:目的地是一個文件的路徑。

      File file:目的地是一個文件。

    構造方法的作用

      ① 創建一個 FileOutputStream 對象

      ② 會根據構造方法中傳遞的文件/文件路徑,創建一個空的文件

      ③ 會把 FileOutputStream 對象指向創建好的文件 

   寫入數據的原理:

    java程序-->JVM(java虛擬機)-->OS(操作系統)-->OS調用寫數據的方法-->把數據寫入到文件中

   字節輸出流的使用步驟【重要】:

     ① 創建一個FileOutputStream對象,構造方法中傳遞寫入數據的目的地

     ② 調用FileOutputStream對象中的方法write,把數據寫入到文件中

     ③ 釋放資源(流使用會占用一定的內存,使用完畢要把內存清空,提供程序的效率)

  2、寫出字節數據

    (1)寫出字節:使用write(int b) 方法,每次可以寫出一個字節數據,代碼使用演示:

1  public static void main(String[] args) throws IOException { 2         //1.創建一個FileOutputStream對象,構造方法中傳遞寫入數據的目的地
3         FileOutputStream fos = new FileOutputStream("E:\\a.txt"); 4         //2.調用FileOutputStream對象中的方法write,把數據寫入到文件中 5         //public abstract void write(int b) :將指定的字節輸出流。
6         fos.write(97); 7         //3.釋放資源(流使用會占用一定的內存,使用完畢要把內存清空,提供程序的效率) 8         //fos.close();
9     }

    原理:

 

    (2)寫出字節數組:使用write(byte[] b) ,每次可以寫出數組中的數據,代碼使用演示:

 1 public static void main(String[] args) throws IOException {  2         //創建FileOutputStream對象,構造方法中綁定要寫入數據的目的地
 3         FileOutputStream fos = new FileOutputStream(new File("E:\\b.txt"));  4         //調用FileOutputStream對象中的方法write,把數據寫入到文件
 5 
 6         /*
 7  public void write(byte[] b):將 b.length字節從指定的字節數組寫入此輸出流。  8  一次寫多個字節:  9  如果寫的第一個字節是正數(0-127),那么顯示的時候會查詢ASCII表 10  如果寫的第一個字節是負數,那第一個字節會和第二個字節,兩個字節組成一個中文顯示,查詢系統默認碼表(GBK) 11          */
12         byte[] bytes = {65,66,67,68,69};//ABCDE 13         //byte[] bytes = {-65,-66,-67,68,69};//烤紻E
14  fos.write(bytes); 15 
16         /*
17  寫入字符的方法:可以使用String類中的方法把字符串,轉換為字節數組 18  byte[] getBytes() 把字符串轉換為字節數組 19          */
20         byte[] bytes2 = "你好".getBytes(); 21         System.out.println(Arrays.toString(bytes2));//[-28, -67, -96, -27, -91, -67]
22  fos.write(bytes2); 23 
24         //釋放資源
25  fos.close(); 26     }

 

    (3)寫出指定長度字節數組write(byte[] b, int off, int len) ,每次寫出從off索引開始,len個字節,代碼使用演示:

 1 public static void main(String[] args) throws IOException {  2         //創建FileOutputStream對象,構造方法中綁定要寫入數據的目的地
 3         FileOutputStream fos = new FileOutputStream(new File("09_IOAndProperties\\b.txt"));  4 
 5         /*
 6  public void write(byte[] b, int off, int len) :把字節數組的一部分寫入到文件中  7  int off:數組的開始索引  8  int len:寫幾個字節  9          */
10         byte[] bytes = {65,66,67,68,69};//ABCDE
11         fos.write(bytes,1,2);  //BC 12 
13         //釋放資源
14  fos.close(); 15     }

 

  3、數據追加續寫

    追加寫/續寫:使用兩個參數的構造方法

FileOutputStream(String name, boolean append)創建一個向具有指定 name 的文件中寫入數據的輸出文件流。
FileOutputStream(File file, boolean append) 創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。

    參數

      String name,File file:表示寫入數據的目的地。

      boolean append :是否開啟追加

          true:創建對象不會覆蓋源文件,繼續在文件的末尾追加寫數據

          false:創建一個新文件,覆蓋源文件

    Demo:

1 public static void main(String[] args) throws IOException { 2         FileOutputStream fos = new FileOutputStream("E:\\c.txt",true); 3         for (int i = 1; i <=10 ; i++) { 4             fos.write("你好".getBytes()); 5  } 6 
7  fos.close(); 8     }

 

  4、寫出換行

    可以發現寫出的內容到文件內都是在一行內顯示,沒有換行。

    回車符 \r 和換行符 \n

      •   回車符:回到下一行開頭(return)
      •   換行符:下一行(newline)

    寫換行:需要寫換行符號。

    系統中的換行:

      •   Windows系統里,每行結尾是 回車+換行 ,即 \r\n
      •   Linux / Unix系統里,每行結尾只有 換行 ,即 \n
      •   Mac系統里,每行結尾是 回車 ,即 \r 。從 Mac OS X開始與Linux統一。 

    Demo :

1 public static void main(String[] args) throws IOException { 2         FileOutputStream fos = new FileOutputStream("E:\\c.txt",true); 3         for (int i = 1; i <=10 ; i++) { 4             fos.write("你好".getBytes()); 5             fos.write("\r\n".getBytes()); 6  } 7 
8  fos.close(); 9     }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM