概念
* IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸
* Java對數(shù)據(jù)的操作是通過流的方式
* Java用于操作流的類都在IO包中
* 流按流向分為兩種:輸入流,輸出流。
* 流按操作類型分為兩種:
* 字節(jié)流 : 字節(jié)流可以操作任何數(shù)據(jù),因為在計算機中任何數(shù)據(jù)都是以字節(jié)的形式存儲的
* 字符流 : 字符流只能操作純字符數(shù)據(jù),比較方便。
字節(jié)流
|--InputStream(字節(jié)輸入流,字節(jié)流的抽象父類,抽象類不能直接創(chuàng)建對象,必須使用子類)
|--FileInputStream(文件字節(jié)輸入流,就是以字節(jié)的形式讀取文件內(nèi)容)
|--read()每次讀取一個字節(jié)(byte),但是返回值類型,為int類型,防止出現(xiàn)文件提前結(jié)束
|--read(byte[] b)每次讀取多個字節(jié),將內(nèi)容放入字節(jié)數(shù)組b中
|--BufferedInputStream(字節(jié)輸入緩沖流,其實就是一個包裝類,創(chuàng)建對象時要接收一個InputStream,內(nèi)部封裝了一個1024*8的字節(jié)數(shù)組)
|--使用BufferedInputStream就不用再定義數(shù)組了
|--OutputStream(字節(jié)輸出流,字節(jié)流的抽象父類)
|--FileOutputStream(文件字節(jié)輸出流,就是以字節(jié)的形式將內(nèi)容寫入到文件中)
|--write(int b)一次寫出一個字節(jié)
|--write(byte[] b)將字節(jié)數(shù)組b里的內(nèi)容寫入到文件中
|--write(byte[] b, int off, int len)將字節(jié)數(shù)組b里的內(nèi)容,從索引為off的位置開始,總共寫len個
|--BufferedOutputStream(字節(jié)輸出緩沖流,其實就是一個包裝類,創(chuàng)建對象時要接收一個OutputStream,內(nèi)部封裝了一個1024*8的字節(jié)數(shù)組)
字符流
|--Reader(字符輸入流,字符流的抽象父類,抽象類不能直接創(chuàng)建對象,必須使用子類)
|--FileReader(文件字符輸入流,就是以字符的形式讀取文件中的內(nèi)容)
|--read()每次讀取一個字符,即可以按照字符大小讀取,返回值類型提升為int類型
|--read(char[] b)每次讀取多個字符,將內(nèi)容放入字符數(shù)組b中
|--BufferedReader(字符輸入緩沖流,其實就是一個包裝類,創(chuàng)建對象時要接收一個Reader,內(nèi)部封裝了一個1024*8的字符數(shù)組)
|--使用BufferedReader和BufferedWriter就不用再定義數(shù)組了
|--readLine()可以讀取一行字符(不包含換行符號)
|--LineNumberReader是BufferedReader的子類, 具有相同的功能, 并且可以統(tǒng)計行號
|--getLineNumber()方法可以獲取當(dāng)前行號
|--setLineNumber()方法可以設(shè)置當(dāng)前行號
|--Writer(字符輸出流,字符流的抽象父類)
|--FileWriter(文件字符輸出流,就是以字符的形式將內(nèi)容寫入到文件中)
|--write('a')/write("aaaa")可以寫入單個字符或者寫入字符串
|--write(char[] b, int off, int len)將字符數(shù)組b里的內(nèi)容,從所以為off的位置開始,總共寫len個
|--BufferedWriter(字符輸出緩沖流,其實就是一個包裝類,創(chuàng)建對象時要接收一個Writer,內(nèi)部封裝了一個1024*8的字符數(shù)組)
|--newLine()可以輸出一個跨平臺的換行符號"\r\n"
轉(zhuǎn)換流(使用指定的碼表讀寫字符)
|--InputStreamReader字節(jié)輸入流到字符輸入流的橋梁
|--OutputStreamWriter字符輸出流到字節(jié)輸出流的橋梁
其它流
|--SequenceInputStream序列流
|--序列流可以把多個字節(jié)輸入流整合成一個, 從序列流中讀取數(shù)據(jù)時, 將從被整合的第一個流開始讀, 讀完一個之后繼續(xù)讀第二個, 以此類推.
|--SequenceInputStream(InputStream in1,InputStream in2)
|--SequenceInputStream(Enumeration en)
|--ByteArrayOutputStream字節(jié)數(shù)組內(nèi)存輸出流
|--是將文件或鍵盤錄入的數(shù)據(jù)寫入到內(nèi)存中的字節(jié)數(shù)組
|--ByteArrayInputStream字節(jié)數(shù)組內(nèi)存輸入流
|--是以字節(jié)的方式讀取內(nèi)存中的字節(jié)數(shù)組數(shù)據(jù)
|--創(chuàng)建此對象要傳遞一個字節(jié)數(shù)組
|--RandomAccessFile隨機讀寫訪問流
|--該流同時具有讀和寫的功能
|--seek(long pos)設(shè)置讀取和寫入的位置
|--對象操作流
|--ObjectOutputStream將對象寫入到文件,要求對象所屬的類實現(xiàn)Serializable接口,該接口里面沒有內(nèi)容,只是一個標(biāo)記
|--writeObject()將對象寫入文件
|--ObjectInputStream將上面存入到文件中的對象讀取出來,因為存的時候所有對象是按照Object存入,所以取出來要進(jìn)行強制類型轉(zhuǎn)換
|--readObject()從文件讀取一個對象出來
|--數(shù)據(jù)輸入輸出流
|--DataInputStream數(shù)據(jù)輸入流,就是從文件讀取特定類型的數(shù)據(jù)
|--readInt()從文件中讀取一個int類型的數(shù)據(jù)
|--readLong()從文件讀取一個long類型的數(shù)據(jù)
|--DataOutputStream數(shù)據(jù)輸出流,向文件寫出特定類型的數(shù)據(jù)
|--writeInt()向文件寫入一個int類型的數(shù)據(jù)
|--writeLong()向文件寫入一個long類型的數(shù)據(jù)
|--打印流PrintStream
|--標(biāo)準(zhǔn)輸入輸出流
|--System.in是InputStream, 標(biāo)準(zhǔn)輸入流, 默認(rèn)可以從鍵盤輸入讀取字節(jié)數(shù)據(jù)
|--System.setIn(InputStream)修改輸入流
|--System.out是PrintStream, 標(biāo)準(zhǔn)輸出流, 默認(rèn)可以向Console中輸出字符和字節(jié)數(shù)據(jù)
|--System.setOut(PrintStream)修改輸出流
|--鍵盤錄入的兩種方式
|--Scanner sc = new Scanner(System.in);
|--BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|--Properties是Hashtable的子類,是一個Map,存放的是鍵值對,一般用于項目的配置文件,配置文件中鍵和值的類型都為String類型
|--setProperty(String key,String value)向Properties中存入鍵值對
|--getProperty(String key)根據(jù)鍵獲取值
|--public Enumeration stringPropertyNames()以String的形式獲取所有的鍵,并封裝成Enumeration對象,之后進(jìn)行遍歷
|--load(InputStream inStream) 將字節(jié)輸入流inStream所關(guān)聯(lián)的文件中的值加載到Properties對象中
|--store(OutputStream out, String comments) 將Properties對象中的內(nèi)容寫入到out流所關(guān)聯(lián)的文件中,comments為說明信息
flush用來刷新緩沖區(qū)的,刷新后可以再次寫出,即flush后流仍然可以使用
close用來關(guān)閉流釋放資源的的,如果是帶緩沖區(qū)的流對象的close()方法,不但會關(guān)閉流,還會再關(guān)閉流之前刷新緩沖區(qū),關(guān)閉后不能再寫出,即不能再使用該流
IO流的標(biāo)準(zhǔn)異常處理