一、基本概念:
1.IO基本概念:
IO的本質就是輸入輸出(Input\Output);
(1)輸入(Input):指的是可以讓程序從外部系統(tǒng)獲得數(shù)據(jù)(讀取外部數(shù)據(jù));
(2)輸出(Output):指的是程序輸出數(shù)據(jù)給外部系統(tǒng)從而可以操作外部系統(tǒng)(將數(shù)據(jù)寫出到外部系統(tǒng));
2.數(shù)據(jù)源:
數(shù)據(jù)源data source,提供數(shù)據(jù)的原始媒介。
數(shù)據(jù)源分為:
(1)源設備:為程序提供數(shù)據(jù),一般對應輸入流;
(2)目標設備:程序數(shù)據(jù)的目的地,一般對應輸出流;
3.流的概念:
(1)流的原理:
1)在 Java 程序中,對于數(shù)據(jù)的輸入/輸出操作以“流”(stream) 方式進行;
2)J2SDK?(Java 2 Software Development Kit)提供了各種各樣的“流”類,用以獲取不同種類的數(shù)據(jù);程序中通過標準的方法輸入或輸出數(shù)據(jù)。
3)Java 的流類型一般位于 java.io 包中。
4) 流是一個抽象、動態(tài)的概念,是一連串連續(xù)動態(tài)的數(shù)據(jù)集合。

(2)流的分類:
1)按照方向分為:輸入流和輸出流;
2)按照讀寫單位分為:字節(jié)流和字符流;
3)按照功能分為:節(jié)點流和處理流;
二、文件字節(jié)流:
1.字節(jié)輸入流(InputStream):
(1)字節(jié)流輸入流InputStream是抽象類,F(xiàn)ileInputStream繼承了InputStream類;FileInputStream 讀取文件內(nèi)容。
(2)構造方法:
1) FileInputStream(File file);通過打開與實際文件的連接創(chuàng)建一個FileInputStrea
2)FileInputStream(String name)通過打開一個到實際文件的連接來創(chuàng)建一個FileInputStream,該文件通過文件系統(tǒng)中的路徑名 name 指定。
(3)常用方法:
?int read():從此輸入流中讀取一個數(shù)據(jù)字節(jié)。
int read(byte[] b):從此輸入流中將最多 b.length 個字節(jié)的數(shù)據(jù)讀入一個 byte 數(shù)組中。
?void close(): 關閉此文件輸入流并釋放與此流有關的所有系統(tǒng)資源。


2.字節(jié)輸出流(OutputStream):
(1)java.io.OutPutStream抽象類;FileOutPutStream:繼承了OutputStream;文件輸出流是用于將數(shù)據(jù)寫入到輸出流File。
(2)構造方法:
1)FileOutputStream(File file):創(chuàng)建一個向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流。
2)FileOutputStream(String name): 創(chuàng)建一個向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流
3)FileOutputStream(File file, boolean append): 創(chuàng)建一個向指定 File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流。
4)FileOutputStream(String name, boolean append):創(chuàng)建一個向具有指定 name 的文件中寫入數(shù)據(jù)的輸出文件流。
(3)常用方法:
1) write(byte[] b): 將 b.length 個字節(jié)從指定 byte 數(shù)組寫入此文件輸出流中。
2)write(int b): 將指定字節(jié)寫入此文件輸出流。
3) close(): 關閉此文件輸出流并釋放與此流有關的所有系統(tǒng)資源。


3.實現(xiàn)文件復制:
1)使用輸入流從源文件中將文件讀取出來;
2)使用輸出流將文件寫入到目的地;


三、文件字符流:
1.字符輸入流(Reader):
(1)FileReader字符輸出流:繼承了Reader抽象類;
(2)構造方法:
1)FileReader(File file)? 在給定從中讀取數(shù)據(jù)的 File 的情況下創(chuàng)建一個新 FileReader。
2)FileReader(String fileName): 在給定從中讀取數(shù)據(jù)的文件名的情況下創(chuàng)建一個新 FileReader。
(2)常用方法;
1)read():讀取單個字符。
2)read(char[] cbuf, int off, int len):將字符讀入數(shù)組的某一部分。
3)read(CharBuffer target);試圖將字符讀入指定的字符緩沖區(qū)。
4)close():關閉該流并釋放與之關聯(lián)的所有資源。


2.字符輸出流(Writer):
(1)FileWriter用于寫入字符流。繼承了OutputStreamWriter抽象類;
(2)構造方法:
1)FileWriter(File file):根據(jù)給定的 File 對象構造一個 FileWriter 對象。
2)FileWriter(String fileName):根據(jù)給定的文件名構造一個 FileWriter 對象。
3)FileWriter(File file, boolean append):根據(jù)給定的 File 對象構造一個 FileWriter 對象。
(3)常用方法:
1) void write( int c ):寫入單個字符。
2)void write( char[]cbuf):寫入字符數(shù)組。
3)abstract void write( char [ ]cbuf, int off, int len ):?寫入字符數(shù)組的某一部分。
4)void write(String str):寫入字符串。
5)abstract void flush( ):刷新該流的緩沖。
6)void close( ):關閉此流,但要先刷新它。


(3)使用字符流實現(xiàn)文件復制:
1)創(chuàng)建字符輸入流和輸出流;
2)使用字符輸入輸出流;
3)通過循環(huán)獲取文件的字節(jié);
4)使用read()和write分別讀取和寫入字符
5)關閉程序;

