IO流

流的類圖

分類

1.按數(shù)據(jù)流向

  • 輸入流
  • 輸出流
  1. 按數(shù)據(jù)類型
  • 字節(jié)流
  • 字符流

IO流常用基類

  • 字節(jié)流的抽象基類:InputStream,OutputStream
  • 字符流的抽象基類:Reader,Writer
    這四個類的子類都以他們?yōu)槊纸Y(jié)尾
    由于他們都是抽象的類,無法實例化,因此需要尋找他們的子類

FileOutputStream 寫入/輸出數(shù)據(jù)字節(jié)流

構造方法

FileOutputStream(File file) 參數(shù)為File類型的對象
FileOutputStream(File file,boolean append) 參數(shù)為File類型的對象,若append為true,則在文件末尾繼續(xù)寫
FileOutputStream(String name) 參數(shù)為路徑

寫入數(shù)據(jù)

-步驟:1. 創(chuàng)建流對象 2. 寫數(shù)據(jù) 3.釋放資源
public void write(byte[] b) 將字節(jié)數(shù)組寫入文件
public void write(byte[] b, int off, int len) 將字節(jié)數(shù)組的一部分寫入文件,從off開始,寫len個
public void write(int b) 寫一個字節(jié),根據(jù)編碼表找到對應字符,如97對應a

實現(xiàn)換行

write("\n".getBytes()); 寫入換行符 “\n” 的字節(jié)
注意:可能通過某些軟件打開會發(fā)現(xiàn)沒有換行,是因為不同操作系統(tǒng)的換行符不同,但高級記事本軟件可以識別任意換行符

異常處理

標準寫法

FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("fos2");
            fos.write("Java".getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

FileInputStream 字節(jié)流讀入數(shù)據(jù)

構造方法

FileInputStream(File file) 參數(shù)為File類型的對象
FileInputStream(String name) 參數(shù)為路徑

讀入數(shù)據(jù)

public int read() 從該輸入流讀取一個字節(jié)的數(shù)據(jù),如果返回是-1,則讀完了
public int read(byte[] b) 一次讀一個字節(jié)數(shù)組的數(shù)據(jù),返回讀到的字節(jié)個數(shù)

計算機如何識別中文?

在計算機中,中文占兩個字節(jié),第一個字節(jié)一定是負數(shù)

自帶數(shù)組的IO流

BufferedOutputStream 自帶緩沖區(qū)的流,BufferedInputStream 自帶緩沖區(qū)的流

構造函數(shù)

public BufferedInputStream(InputStream in) 創(chuàng)造默認大小的流
public BufferedInputStream(InputStream in,int size) 創(chuàng)建指定大小的流
public BufferedOutputStream(OutputStream out) 創(chuàng)造默認大小的流
public BufferedOutputStream(OutputStream out,int size) 創(chuàng)建指定大小的流
為什么要傳遞一個流對象,而不傳遞一個具體的文件或文件路徑呢?
此流僅僅提供緩沖區(qū),真正讀寫還需要基本的流對象實現(xiàn)

OutputStreamWriter 寫入/輸出數(shù)據(jù)字符流,從字節(jié)流到字符流的橋

構造函數(shù)

public OutputStreamWriter (OutputStream out) 參數(shù)為OutputStream 對象,可以用子類對象入FileOutputStream
public OutputStreamWriter (OutputStream out,String charsetName) charsetName 為編碼名稱

方法

public void write(int c) 寫一個字符
public void write(char[] cbuf) 寫一個字符數(shù)組
public void write(char[] cbuf,int odd,int len) 寫一個字符數(shù)組的一部分
public void write(String str ) 寫一個字符串
public void write(String str,int odd,int len) 寫一個字符串的一部分
public void flush() 刷新

InputStreamReader 讀取數(shù)據(jù)字符流,從字節(jié)流到字符流的橋

構造函數(shù)

public InputStreamReader (InputStream in) 參數(shù)為InputStream 對象,可以用子類對象入FileInputStream
public InputStreamReader (InputStream in,String charsetName) charsetName 為編碼名稱

方法

public int read(int c) 讀一個字符,沒讀到返回-1
public int read(char[] chs) 讀一個字符數(shù)組,結(jié)果在chs數(shù)組中,返回讀到的長度,沒讀到返回-1

FileWriter 和FileReader

在使用本地默認編碼表時,使用這兩個字符流的類
FileWriter 繼承 OutputStreamWriter ,F(xiàn)ileReader 繼承 InputStreamReader ,使用方法如上

字符緩沖流BufferedWriter和BufferedReader

特殊功能

BufferedWriter : public void newLine() 產(chǎn)生一個新的行
BufferedReader : public String readLine() 一次讀取一行,將讀到的內(nèi)容以String 返回,若沒有讀到,返回null

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1、IO流 1.1、概述 之前學習的File類它只能操作文件或文件夾,并不能去操作文件中的數(shù)據(jù)。真正保存數(shù)據(jù)的是文...
    Villain丶Cc閱讀 2,785評論 0 5
  • IO簡單概述 IO解決問題 : 解決設備與設備之間的數(shù)據(jù)傳輸問題(硬盤 -> 內(nèi)存 內(nèi)存 -> 硬盤) 讀和寫文...
    奮斗的老王閱讀 3,541評論 0 53
  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File類用于表示文件(目錄)...
    閆子揚閱讀 561評論 0 0
  • 標準輸入輸出,文件的操作,網(wǎng)絡上的數(shù)據(jù)流,字符串流,對象流,zip文件流等等,java中將輸入輸出抽象稱為流,就好...
    navy_legend閱讀 799評論 0 0
  • Java中是通過流的方式對數(shù)據(jù)進行操作,用于操作流的類都在IO包中,IO流用來處理設備之間的數(shù)據(jù)傳輸。IO流按照流...
    阿Q說代碼閱讀 1,623評論 0 1

友情鏈接更多精彩內(nèi)容