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