java IO體系圖java
IO流的操做規律總結:數組
1,明確體系:
數據源:InputStream ,Reader
數據匯:OutputStream,Writer網絡
2,明確數據:由於數據分兩種:字節,字符。
數據源:是不是純文本數據呢?
是:Reader 字符輸入流
否:InputStream 字節輸入流
數據匯:是不是純文本數據呢?
是:Writer 字符輸出流
否:OutputStream 字節輸出流、socket
到這裏就能夠明確具體要使用哪個體系了,剩下的就是要明確使用這個體系中的哪一個對象。
編碼
3.明確設備:spa
數據源:
鍵盤:System.in 鍵盤輸入
硬盤:FileXXX 硬盤上面
內存:數組。
網絡:socket socket.getInputStream();3d
數據匯:
控制檯:System.out
硬盤:FileXXX
內存:數組
網絡:socket socket.getOutputStream();對象
4,明確額外功能:
1,須要轉換?是,使用轉換流。InputStreamReader OutputStreamWriterblog
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