java基礎知識回顧之javaIO類總結
java IO體系圖
IO流的操作規律總結:
1,明確體系:
資料來源:InputStream ,Reader
資料匯:OutputStream,Writer
2,明確資料:因為資料分兩種:位元組,字元。
資料來源:是否是純文字資料呢?
是:Reader 字元輸入流
否:InputStream 位元組輸入流
資料匯:是否是純文字資料呢?
是:Writer 字元輸出流
否:OutputStream 位元組輸出流、
到這裡就可以明確具體要使用哪一個體系了,剩下的就是要明確使用這個體系中的哪個物件。
3.明確裝置:
資料來源:
鍵盤:System.in 鍵盤輸入
硬碟:FileXXX 硬碟上面
記憶體:陣列。
網路:socket socket.getInputStream();
資料匯:
控制檯:System.out
硬碟:FileXXX
記憶體:陣列
網路:socket socket.getOutputStream();
4,明確額外功能:
1,需要轉換?是,使用轉換流。InputStreamReader OutputStreamWriter
2,需要高效?是,使用緩衝區。Buffered
3,需要其他?
-------------------------------------------------------------------------------------------------------------------------------------
1,複製一個文字檔案。
1,明確體系:
源:InputStream ,Reader
目的:OutputStream ,Writer
2,明確資料:
源:是純文字嗎?是 Reader
目的;是純文字嗎?是 Writer
3,明確裝置:
源:硬碟上的一個檔案。 FileReader
目的:硬碟上的一個檔案。FileWriter
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
4,需要額外功能嗎?
需要,高效,使用buffer
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));
2,讀取鍵盤錄入,將資料儲存到一個檔案中。
1,明確體系:
源:InputStream ,Reader
目的:OutputStream ,Writer
2,明確資料:
源:是純文字嗎?是 Reader
目的;是純文字嗎?是 Writer
3,明確裝置:
源:鍵盤,System.in
目的:硬碟,FileWriter
InputStream in = System.in;
FileWriter fw = new FileWriter("a.txt");
4,需要額外功能嗎?
需要,因為源明確的體系時Reader。可是源的裝置是System.in。
所以為了方便於操作文字資料,將源轉成字元流。需要轉換流。InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("a.txt");
需要高效不?需要。Buffer
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));
3,讀取一個文字檔案,將資料展現在控制檯上。
1,明確體系:
源:InputStream ,Reader
目的:OutputStream ,Writer
2,明確資料:
源:是純文字嗎?是 Reader
目的;是純文字嗎?是 Writer
3,明確裝置:
源:硬碟檔案,FileReader。
目的:控制檯:System.out。
FileReader fr = new FileReader("a.txt");
OutputStream out = System.out;
4,需要額外功能?
因為源是文字資料,確定是Writer體系。所以為了方便操作字元資料,
需要使用字元流,但是目的又是一個位元組輸出流。
需要一個轉換流,OutputStreamWriter:字元向位元組轉化
FileReader fr = new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(System.out);
需要高效嗎?需要。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
4,讀取鍵盤錄入,將資料展現在控制檯上。
1,明確體系:
源:InputStream ,Reader
目的:OutputStream ,Writer
2,明確資料:
源:是純文字嗎?是 Reader
目的;是純文字嗎?是 Writer
3,明確裝置:
源:鍵盤:System.in
目的:控制檯:System.out
InputStream in = System.in;
OutputStream out = System.out;
4,需要額外功能嗎?
因為處理的資料是文字資料,同時確定是字元流體系。
為方便操作字元資料的可以將源和目的都轉成字元流。使用轉換流。
為了提高效率,使用Buffer
BufferedReader bufr =new BufferedReader(new InputStreamReader(Systme.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
5,讀取一個文字檔案,將檔案按照指定的編碼表UTF-8進行儲存,儲存到另一個檔案中。
1,明確體系:
源:InputStream ,Reader
目的:OutputStream ,Writer
2,明確資料:
源:是純文字嗎?是 Reader
目的;是純文字嗎?是 Writer
3,明確裝置:
源:硬碟:FileReader.
目的:硬碟:FileWriter
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
4,額外功能:
注意:目的中雖然是一個檔案,但是需要指定編碼表。
而直接操作文字檔案的FileWriter本身內建的是本地預設碼錶。無法明確具體指定碼錶。
這時就需要轉換功能。OutputStreamWriter,而這個轉換流需要接受一個位元組輸出流,而且
對應的目的是一個檔案。這時就使用位元組輸出流中的操作檔案的流物件。FileOutputStream.
FileReader fr = new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
需要高效嗎?
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8"));
目前為止,10個流物件重點掌握。
字元流:
FileReader
FileWriter
BufferedReader
BufferedWriter
InputStreamReader
OutputStreamWrier
位元組流:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream