Java基礎——IO流—位元組流
阿新 • • 發佈:2022-04-02
一、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();
}
}