IO流詳解及常用方法


簡述

  IO流指的就是內存到硬盤的路徑,從硬盤到內存我們稱為輸入流,從內存到硬盤我們稱為輸出流。根據數據的類型我們還可以把IO流分為字節流和字符流,一個字符等於2個字節。

  一個中文在GBK中占兩個字節,在UTF-8中占三個字節,所以我們用字節的輸入輸出流讀取/寫入中文時,會有些困難

  所以java提供一些字符流類,以字符為單位讀寫數據,專門用於處理文本文件。

  任意的文本編輯器,在打開文件的時候,都會查詢編碼表,將字節轉化為字符表示

  如果在0到127范圍就會查詢ASCII碼表,如果是其他值就會查詢系統默認編碼表,UTF-8三個字節是一個中文,GBK兩個字節是一個中文

  windows系統的換行符是\r\n,linux系統的換行符是/n,mac是/r

 字節輸出流OutputStream

  這是一個抽象類,表示所有字節輸出流的超類。

  輸出流的本質就是在指定路徑創建一個空的文件,然后對此空文件進行操作。

  close() 關閉輸出流

  flush() 刷新此輸出流

  write(byte[] b)將b.length字節從指定的byte數組寫入此輸出流

常用子類FileOutputStream 

簡述

  FileOutputStream是文件字節輸出流,繼承OutputStream,作用是把內存中的數據寫入到硬盤的文件中。

構造方法:

  FileOutputStream(File file) 創建一個向指定File對象表示的文件中寫入數據的文件輸出流

  FileOutputStream(String name) 創建一個向指定文件名稱表示的文件中寫入數據的文件輸出流

  FileOutputStream(File file,boolean append) append表示是否追加數據

  FileOutputStream(String name,boolean append) append表示是否追加數據

  若使用下面兩個構造函數,則創建對象時不會創建空文件,而是繼續在末尾追加數據

字節輸入流InputStream

  read() 讀取輸入流數據的下一個字節,讀取到文件的末尾就返回-1

  read(byte[] b) 從輸入流中讀取一定量的字節,將其存儲到緩沖區數組b中

  close() 關閉資源

常用子類FileInputStream

簡述

  FileInputStream是文件字節輸入流,繼承InputStream,作用是把硬盤中的數據讀入到內存中

構造方法

  FileInputStream(File file)

  FileInputStream(String name)

字符輸入流Reader

  Reader表示用於讀取字符流的所有類的超類,可以讀取字符信息到內存中  

  void close() 關閉此字符流

  int read() 從輸入流中讀取一個字節

  int read(char[] buf) 從輸入流中讀取一些字符,並將它們存儲到字符串數組buf中

常用子類FileReader

簡述

  讀取文件的字符輸入流,該類繼承InputStreamReader,InputStreamReader繼承Reader

  作用是把硬盤文件中的數據以字符的方式讀入內存中

構造方法

  FileReader(File file)

  FileReader(String name)

字符輸出流Writer

  Writer是字符輸出流的超類

  close() 關閉此流

  write(char[] cbuf) 寫入字符數組

  write(char[] cbuf,int off,int len) 寫入字符數組的某一部分

  write(int c) 寫入單個字符

  write(String str) 寫入單個字符串

  write(String str,int off ,int len) 寫入字符串的某一部分

常用子類FileWriter

簡述

  輸出文件的字符輸出流,該類繼承OutputStreamWriter,OutputStreamWriter繼承Write

  注意字符輸出流的write是將數據寫入內存的緩沖區中(字符轉化為字節的過程)

  需要調用flush或者關閉資源才會將數據從緩沖區刷到硬盤

  作用是把內存中的數據以字符的方式輸出到硬盤中

構造方法

  FileWriter(File file)

  FileWriter(String name)

  FileWriter(File file,boolean append)

  FileWriter(String name,boolean append)

流的異常處理

  在jdk1.7之后,可以在try后增加一個小括號,在括號內可以定義流對象,那么這個流對象的作用域就在try中有效,try中的代碼執行完畢時會自動地把流對象釋放,這樣做可以簡化IO流的異常處理

try(FileInputStream fileInputStream = new FileInputStream("c:\\1.jpg");
            FileOutputStream fileOutputStream = new FileOutputStream("d:\\1.jpg");
            ){
            byte[] bytes = new byte[1024];
            int len = 0;
            while((len = fileInputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,len);//寫bytes的有效區間
            }
        }catch (IOException e){
            e.printStackTrace();
        }

 

 

 

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM