1.概念數組
* IO流用來處理設備之間的數據傳輸ide
* Java對數據的操做是經過流的方式編碼
* Java用於操做流的類都在IO包中spa
* 流按流向分爲兩種:輸入流(讀取數據),輸出流(寫入數據)。code
* 流按操做類型分爲兩種:視頻
* 字節流 : 字節流能夠操做任何數據,由於在計算機中任何數據都是以字節的形式存儲的對象
* 字符流 : 字符流只能操做純字符數據,比較方便。blog
2.IO流經常使用父類圖片
* 字節流的抽象父類:資源
* InputStream
* OutputStream
* 字符流的抽象父類:
* Reader
* Writer
* 3.IO程序書寫
* 使用前,導入IO包中的類
* 使用時,進行IO異常處理
* 使用後,釋放資源
1 //從一個文件中讀取數據 2 /** 3 * 1。建立一個文件輸入對象,並關聯a。txt 4 * 2.定義一個遍歷,記錄每次讀到的字節 5 * 3.循環遍歷打印讀出該內容 6 * read()方法 依次讀取一個字節 7 */ 8 FileInputStream file = new FileInputStream("a.txt"); 9 int b; 10 while((b = file.read()) != -1) { 11 System.out.println(b); 12 } 13 //釋放資源!! 14 file.close(); 15 16 /** 17 * throws拋出的是文件可能找不到的錯誤 18 * 讀文件是也有可能讀不成功,一樣須要進行異常處理 19 * FileNotFoundException是IOException的一個子類 20 * 輸出內容就是GBK編碼,緣由GBK編碼包含了ASCII碼錶 21 * -1表示文件的結尾,當遇到-1時,表示文件已經讀取完畢 22 * 23 */
read()方法讀取的試試一個字節,爲何返回的是int而不是byte
由於字節輸入流能夠操做任意類型的文件,好比圖片音頻等,這些文件底層都是以二進制形式存儲,若是每次讀取都返回byte,
有可能在讀到中間的時候遇到11111111,那麼這11111111在byte中表示的是-1,而咱們的程序在遇到-1時中止運行,後面的數據
會丟失,因此在讀取時用int類型,若是遇到11111111時會在前面補上3個字節的0,byte類型的-1就變成int類型的255
這樣就能夠保證整個數據均可以讀取完成,讀取完成後,就會返回個-1,結束程序
1 //write()方法一次錄入一個字節 2 //若是沒有b.txt的話,就建立一個 3 FileOutputStream file = new FileOutputStream("b.txt"); 4 //雖然輸入的時int類型,但在寫出時會自動轉爲byte類型,去掉前面的3個字節 5 file.write(98); 6 //釋放資源 7 file.close(); 8 9 10 //追加功能 11 //從新在錄入時,會把原來的數據清除掉,在去添加,也就是把原來的數據覆蓋掉 12 //在關聯文件時,加一個true的關鍵字,就不會覆蓋,而是在原來數據以後在添加內容 13 FileOutputStream file1 = new FileOutputStream("b.txt",true); 14 file1.write(98); 15 file1.write(99);
1 FileInputStream file = new FileInputStream("F:\\21班Java基礎課程\\課件視頻\\day20_IO流\\video\\01.wmv"); 2 FileOutputStream file1 = new FileOutputStream("F:\\21班Java基礎課程\\課件視頻\\day20_IO流\\video\\複製.wmv"); 3 //獲取關聯文件的全部字節 4 int i = file.available(); 5 //聲明一個和文件大小同樣的byte的數組 6 byte [] bytes = new byte[i]; 7 //一次性的讀完整個文件的全部內容 8 file.read(bytes); 9 //把這個內容一次性的寫入指定的文件 10 file1.write(bytes); 11 file.close(); 12 file1.close();