1. 程式人生 > 其它 >Java基礎——IO流—位元組流

Java基礎——IO流—位元組流

一、IO流概述

IO:指的是輸入/輸出(Input/Output)

流:是一種抽象概念,對資料傳輸的總稱。即資料在裝置間的傳輸為流,本質是資料傳輸

IO流:用來處理裝置間資料傳輸問題的,常見的應用有檔案上傳、下載、複製

二、IO流的分類

1.按照資料的流向可以分為以下兩種

輸入流:讀資料

輸出流:取資料

2.按照資料型別來分

位元組流:位元組輸入流、位元組輸出流

字元流:字元輸入流、字元輸出流

一般情況下,IO流的分類是按照資料型別來分的

字元流與位元組流的應用場景

位元組流:什麼時候都可以用,位元組流是萬能的流

字元流:當你將檔案開啟後內容是能看得懂的用字元流

三、位元組流寫資料

位元組流抽象基類

1.InputStream:該抽象類是表示位元組輸入流的所有類的超類

2.OutputStream:該抽象類是表示位元組輸出流的所有類的超類

3.子類特點:子類名稱都是以父類名作為子類名的字尾

使用位元組輸出流寫資料的步驟:

1.建立位元組輸出流物件(呼叫系統功能建立了檔案,建立位元組輸出流物件,讓位元組輸出流物件指向檔案)

2.呼叫位元組輸出流物件的寫資料方法

3.釋放資源(關閉檔案輸出流並釋放與此流相關聯的任何系統資源)

public class Demo02 {
  public static void main(String[] args) throws IOException {
      //建立位元組輸出流物件(呼叫系統功能建立了檔案,建立位元組輸出流物件,讓位元組輸出流物件指向檔案)
      FileOutputStream fops=new FileOutputStream("E:\\abc.txt");
      //呼叫位元組輸出流物件的寫資料方法
      fops.write(97);//注意寫入的97實際呈現的是小寫a,要特別注意
      //釋放資源(關閉檔案輸出流並釋放與此流相關聯的任何系統資源)
      fops.close();

  }
}

位元組流寫資料的三種方法

方法名 說明
void write(int b) 將指定的位元組寫入此檔案輸出流,一次寫一個位元組資料
void write(byte[] b) 將b.lengh位元組從指定的位元組陣列寫入此檔案輸出流,一次寫一個位元組陣列資料
void write(byte[]b,int off,int len) 將len位元組從指定的位元組陣列開始,從偏移量off開始寫入輸出流,一次寫一個位元組陣列的部分資料
/*演示位元組流寫資料的三種方法
* */
public class Demo03 {
  public static void main(String[] args) throws IOException {
      //建立位元組輸出流物件
      FileOutputStream fops=new FileOutputStream("E:\\abc.txt");
      //void write(int b)將指定的位元組寫入此檔案輸出流,一次寫一個位元組資料
      fops.write(97);//寫入小寫a
      //如果不想這樣寫,可以通過、String類中的getBytes方法直接從字串轉化,效果是一樣的
      byte[] b = "b".getBytes();
      fops.write(b);
      //void write(byte[] b)將b.lengh位元組從指定的位元組陣列寫入此檔案輸出流,一次寫一個位元組陣列資料
      byte[] cde = "cde".getBytes();
      fops.write(cde);
      //void write(byte[]b,int off,int len)將len位元組從指定的位元組陣列開始,從偏移量off開始寫入輸出流,一次寫一個位元組陣列的部分資料
      byte[] fghi = "fghi".getBytes();
      fops.write(fghi,0,1);//從下標0開始寫入,寫入長度為一個位元組
      //這樣下來就寫入了abcdef在E盤的abc.txt中
      fops.close();

  }
}

位元組流寫資料的兩個問題

1.位元組流寫資料如何實現換行?

寫完資料後需要加入換行符, windows:\r\n; llinux:\n; mac:\r;

2.位元組流寫資料如何實現追加寫入?

public FileOutputStream(String name,boolean append)

建立檔案輸出流以指定的名稱寫入檔案。如果第二個引數為true,則位元組將寫入檔案的末尾而不是開頭

public class Demo04 {
  public static void main(String[] args) throws IOException {
      //建立輸出流物件
      FileOutputStream fops=new FileOutputStream("E:\\abc.txt",true);//追加寫入
      for (int i=0;i<10;i++){
          fops.write("hello".getBytes());
          fops.write("\r\n".getBytes());
      }
      fops.close();
  }
}