1. 程式人生 > >字節輸出流 OutputStream 總結

字節輸出流 OutputStream 總結

nds 未來 rac bst logs tput 不同 rec 先來

字節輸出流 OutputStream 總結

  • 簡單理解:輸出流針對文件來說就是 流的輸出 到 文件的寫入 ; 輸入入流針對文件來說就是 文件的讀取 到 流的輸入 ;
  • OutputStream 是抽象類,依靠子類不同,同一方法實現的功能也不同。本次總結的是針對文件操作的子類 FileOutputStream
  • 所屬包:java -- io
  • 因OutputStream是的抽象類,所以需要通過實例化子類來獲取其對象。子類總結如下:

    文件操作子類:FileOutputStream
    其它子類待補充
  • 實現接口的觀察 public abstract class OutputStream extends Object implements Closeable, Flushable

    實現了兩個接口 Closeable  和 Flushable ,其中Closeable 接口中只有一個close抽象方法,Flushable接口中只有一個 flush抽象方法
    但是,但是,但是,OutputStream 本身是抽象類,卻定義好了close()和flush() 這兩個普通方法,所以,無需關註他的接口
  • OutputStream 抽象類一共五個(可以簡單理解為三個)方法

    1、關閉操作(普通方法):public void close() throws IOException
    2、刷新操作(普通方法):public void flush() throws IOException
    3、寫入整個數組(普通方法):public void write(byte[] b) throws IOException
    4、(抽象方法):public abstract void write(int b) throws IOException
    5、(普通方法):public void write(byte[] b, int off, int len) throws IOException

    文件操作子類FileOutputStream分析

  • 先來看構造,構造用於初始化資源操作信息,接受 File 類型參數

    1、創建或覆蓋文件:public FileOutputStream(File file) throws FileNotFoundException
    2、是否要對文件內容追加:public FileOutputStream(File file, boolean append) throws FileNotFoundException
    append 為 true 時 是追加,為 false 時 是創建或覆蓋文件
  • 再來看方法,FileOutpubStream做為OutputStream子類,有擴充新方法,但是新方法暫時用不上,先以父類五個方法學習為主

    擴充方法暫時不學,留位未來補充
  • 第一個方法:close()

    \\ 輸入輸出流做為資源操作類,打開了就一定要關閉。
    OutputStream實例化對象名.close() ;
    從1.7開始,Closeable 又繼承了一個AutoCloseable 接口,用於實現自動關閉,細節待補充
  • 第二個方法:flush()

    待補充

    將String型數據寫進文件中

  • 實驗第三個方法:write(byte[] b)

    File file = new File("." + File.separator + "123" + File.separator + "ip6" + File.separator + "ttt.txt") ;
    if (!file.getParentFile().isDirectory()) file.mkdirs() ;
    OutputStream out = new FileOutputStream(file,true) ; // 如果每次都要覆寫,就傳一個參數,file
    String str = "好好學習,天天向上!\r\n" ;
    byte[] data = str.getBytes() ;   // 先將 String 型數據變為字節數組
    out.write(data) ;
    out.close() ;
  • 實驗第四個方法:write(int b)

    File file = new File("." + File.separator + "123" + File.separator + "ip6" + File.separator + "ttt.txt") ;
    if (!file.getParentFile().isDirectory()) file.mkdirs() ;
    OutputStream out = new FileOutputStream(file,true) ; // 如果每次都要覆寫,就傳一個參數,file
    String str = "好好學習,天天向上!\r\n" ;
    byte[] data = str.getBytes() ;   // 先將 String 型數據變為字節數組
    for (byte x : data) {
    out.write(x) ;  //別忘了這裏是接受的int型數據,嚴謹一點就可以寫成 out.write((int)x) ; 
    }
    out.close() ;

    實驗第五個方法:write(byte[] b, int off, int len) 第二個參數是起始位置,第三個參數是長度

    File file = new File("." + File.separator + "123" + File.separator + "ip6" + File.separator + "ttt.txt") ;
    if (!file.getParentFile().isDirectory()) file.mkdirs() ;
    OutputStream out = new FileOutputStream(file,true) ; // 如果每次都要覆寫,就傳一個參數,file
    String str = "好好學習,天天向上!\r\n" ;
    byte[] data = str.getBytes() ;   // 先將 String 型數據變為字節數組
    out.write(data,3,6) ; 這樣寫進去的就是“好學”兩個字,並且沒有了換行
    out.close() ;

字節輸出流 OutputStream 總結