IO流概述分類字節流寫數據三種方式及問題分析
一、IO流概述和分類
IO流介紹:
● IO:輸入/輸出(Input/Output)
● 流:是一種抽象概念,是對數據傳輸的總稱。也就是說數據在設備間的傳輸稱為流,流的本質是數據傳輸
IO流就是用來處理設備間數據傳輸問題的。常見的應用:文件復制;文件上傳;文件下載
IO流的分類:
按照數據的流向:
■ 輸入流:讀數據
■ 輸出流:寫數據
按照數據類型來分:
■ 字節流
字節輸入流
字節輸出流
■ 字符流
字符輸入流
字符輸出流
IO流的使用場景:
■ 如果操作的是純文本文件,優先使用字符流
■ 如果操作的是圖片、視頻、音頻等二進制文件。優先使用字節流
■ 如果不確定文件類型,優先使用字節流。字節流是萬能的流
二、字節流寫數據
字節流抽象基類:
InputStream:這個抽象類是表示字節輸入流的所有類的超類
OutputStream:這個抽象類是表示字節輸出流的所有類的超類
子類名特點:子類名稱都是以其父類名作為子類名的後綴
字節輸出流:
FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件
使用字節輸出流寫數據的步驟:
● 創建字節輸出流對象(調用系統功能創建瞭文件,創建字節輸出流對象,讓字節輸出流對象指向文件)
● 調用字節輸出流對象的寫數據方法
● 釋放資源(關閉此文件輸出流並釋放與此流相關聯的任何系統資源)
示例代碼:
public class FileOutputStreamDemo01 { public static void main(String[] args) throws IOException { //創建字節輸出流對象 //FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件 FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt"); /* 做瞭三件事情: A:調用系統功能創建瞭文件 B:創建瞭字節輸出流對象 C:讓字節輸出流對象指向創建好的文件 */ //void write(int b):將指定的字節寫入此文件輸出流 fos.write(97); //最後都要釋放資源 //void close():關閉此文件輸出流並釋放與此流相關聯的任何系統資源。 fos.close(); } }
三、字節流寫數據的三種方式
寫數據的方法分類:
方法名 | 說明 |
void write(int b) | 將指定的字節寫入此文件輸出流 一次寫一個字節數據 |
void write(byte[] b) | 將b.length字節從指定的字節數組寫入此文件輸出流 一次寫一個字節數組數據 |
void write(byte[] b,int off,int len) | 將len字節從指定的字節數組開始,從偏移量off開發寫入此文件輸出流 一次寫一個字節數組的部分數據 |
示例代碼:
public class FileOutputStreamDemo02 { public static void main(String[] args) throws IOException { //FileOutputStream(String name):創建文件輸出流以指定的名稱寫入文件 FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt"); //new File(name) // FileOutputStream fos = new FileOutputStream(new File("myByteStream\fos.txt")); //FileOutputStream(File file):創建文件輸出流以寫入由指定的 File對象表示的文件 File file = new File("myByteStream\fos.txt"); FileOutputStream fos2 = new FileOutputStream(file); //上兩行代碼合並 FileOutputStream fos2 = new FileOutputStream(new File("myByteStream\fos.txt")); //void write(int b):將指定的字節寫入此文件輸出流 fos.write(97); fos.write(98); fos.write(99); fos.write(100); fos.write(101); // void write(byte[] b):將 b.length字節從指定的字節數組寫入此文件輸出流 byte[] bys = {97, 98, 99, 100, 101}; byte[] getBytes ():返回字符串對應的字節數組 byte[] bys = "abcde".getBytes(); fos.write(bys); //void write(byte[] b, int off, int len):將 len字節從指定的字節數組開始,從 偏移量off開始寫入此文件輸出流 // fos.write(bys,0,bys.length); fos.write(bys, 1, 3); //釋放資源 fos.close(); } }
四、字節流寫數據的兩個小問題
字節流寫數據如何實現換行
windows:\r\n
linux:\n
mac:\r
字節流寫數據如何實現追加寫入
public FileOutputStream(String name,boolean append)
創建文件輸出流以指定的名稱寫入文件。如果第二個參數為true,則字節將寫入文件的末尾而不是開頭
示例代碼:
public class FileOutputStreamDemo03 { public static void main(String[] args) throws IOException { //創建字節輸出流對象 // FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt"); FileOutputStream fos = new FileOutputStream("myByteStream\fos.txt",true); //寫數據 for (int i = 0; i < 10; i++) { fos.write("hello".getBytes()); fos.write("\r\n".getBytes()); } //釋放資源 fos.close(); } }
以上就是IO流概述分類字節流寫數據三種方式及寫數據問題的詳細內容,更多關於IO流概述分類字節流寫數據的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Java BufferedOutputStream類的常用方法講解
- Java中IO流解析及代碼實例詳解
- Java FileInputStream與FileOutputStream使用詳解
- Java的File類和IO流其實真的不難
- Java中的字節,字符輸出流與字節和字符輸入流的簡單理解