注:學習之前,需要自己思考,不要盲目的去看!!!!!不然沒有任何意義
I/O流(一)
1.定義:實現設備之間的傳輸
2.作用:實現數據的讀入和寫出
3.分類:根據操作分為:輸入流和輸出流
根據類型分為:字節流和字符流
字節流:可以操作任何數據的傳入和傳出,因此傳輸的文件可以是:音頻,視頻,圖片,文本
字符流:只能傳輸文本類型的數據(人可以認識的字體),因此傳輸的文件只可以是:文本,但其有其存在的價值是:在字節流的基礎上融入了編碼的操作
字節流的父類(抽象的abstract):InputStream 字節輸入流(讀)
OutputStream 字節輸出流(寫)
字符流的父類(抽象的abstract):Reader 字符輸入流
Writer 字符輸出流
字符流的讀代碼:
//1.創建字符輸入流的對象並關聯文件 (文件必須有) FileReader fileReader = new FileReader("某個文件的路徑"); //2.1讀的第一種方式:一個一個讀 int num = 0; num=file.read();//返回值是int型的字符,如果值為-1表示已經讀完了 System.out.println((char)num);//轉換成ASCII碼值 // while ((num = file.read()) != -1) { // System.out.print((char) num); // } //2.2讀的第二種方式:一組一組讀 char[] arr = new char[2]; int num1 = 0; while ((num1 = file.read(arr)) != -1) { System.out.print(new String(arr, 0, num1)); } //3.一定要關閉流 fileReader.close();
字符流的寫代碼:
// 向文本文件寫入數據 // 1.創建FileWrite類型的對象 // 默認路徑當前的工程 // 如果當前文件在指定的目錄下存在,不會在創建新的,直接使用,並將文件上的內容覆蓋 //如果不存在,創建一個新的 //必須保證文件的路徑是存在的,否則包異常 FileWriter fileWriter = new FileWriter("temp.txt"); //當執行writer方法的時候,數據被臨時放入了流對象的內部數組中,這是一個字節數組,內部會去查編碼表,這時通過flush方法刷新,才能寫入磁盤 fileWriter.write("haha");//2.寫入 //3.刷新 //fileWriter.flush(); //4.關閉 //在close內部默認已經實現了flush的功能 fileWriter.close(); //流關閉之后不能再寫數據 // fileWriter.write("go");異常
字節流讀代碼:
public class Test { public static void main(String[] args) throws IOException { FileInputStream inputStreamReader = new FileInputStream("D:\\Downloads\\workSpaceCJY\\WorkDemoIO\\c.txt");//隨便哪個目錄 int num = 0 ; byte[]arr= new byte[11]; while((num = inputStreamReader.read(arr))!=-1) { System.out.println(new String(arr,0,num)); } } }
字節流讀寫結合:
public static void main(String[] args) throws IOException { FileInputStream inputStreamReader = new FileInputStream("D:\\Downloads\\workSpaceCJY\\WorkDemoIO\\c.txt"); FileOutputStream fileOutputStream = new FileOutputStream("d.txt"); int num = 0; byte[] arr = new byte[11]; while ((num = inputStreamReader.read(arr)) != -1) { System.out.println(new String(arr, 0, num)); fileOutputStream.write(arr); } inputStreamReader.close(); fileOutputStream.close(); }