<small id="7ktuj"></small>
      <bdo id="7ktuj"></bdo>
        <mark id="7ktuj"></mark>

        <source id="7ktuj"></source>
        <small id="7ktuj"></small>

        ITPub博客

        首頁 > 應用開發 > Java > Java基礎中的IO流

        Java基礎中的IO流

        原創 Java 作者:蝴蝶飛啊飛 時間:2019-10-31 13:59:39 0 刪除 編輯

        一、IO

        IO :上傳下載,寫入寫出

        : 一連串流動的數據,以先入先出的方式進行流動,管道,以程序為中心、程序與網絡 | 文件 | 服務器 | 數組 ..

        1. 分類

        1) 按照流向 :

        輸入流:

        輸出流:

        2) 操作單元分 :

        字節流 ( 萬能流 ): 任何內容都可以轉為字節 , 可以傳輸文本 , 圖片 , 音頻 ...

        字符流 : 只能操作純文本數據

        3) 按照功能 :

        節點流 : 包裹源頭 , 實現基本功能

        功能流 : 對節點流增強性能 , 提高效率

        4) 各個分類之間是相輔相成的

        2. 字節流 :

        1) 節點流

        (1) 字節輸入流 : InputStream 此抽象類是表示字節輸入流的所有類的超類

        FileInputStream   從文件系統中的某個文件中獲得輸入字節

        // 字節流輸入 InputStream

        // 導包 導包快捷鍵: ctrl+shift+o

        import java.io.File;

        import java.io.FileInputStream;

        import java.io.FileNotFoundException;

        import java.io.IOException;

        import java.io.InputStream;

        public class Demo01 {

        public static void main(String[] args) throws IOException {

        //FileInputStream(String name) 通過打開一個到實際文件的連接來創建一個 FileInputStream ,該文件通過文件系統中的路徑名 name 指定

        //FileInputStream(File file) 通過打開一個到實際文件的連接來創建一個 FileInputStream ,該文件通過文件系統中的 File 對象 file 指定

        InputStream is=new FileInputStream(new File("D:/test.txt"));// 創建 D 盤符的根目錄下的文件

        System.out.println(is);

        // 方式 1 int read() 讀入數據 一個字節一個字節讀入

        /*int num=is.read();

        System.out.println((char)num);

        num=is.read();

        System.out.println((char)num);

        System.out.println((char)(is.read()));*/

        // 方式 2 :使用循環 , 循環讀入,可以簡化代碼 , 重復代碼只寫一次 , 但還是一個字節一個字節的讀入

        /*int num=-1;

        while((num=is.read())!=-1){

        System.out.println((char)num);

        }*/

        // 方式 3 int read(byte[] b) 一個字節數組一個字節數組的讀入

        // 返回值 : 返回讀入到字節數組中數據的個數 , 沒有讀到返回 -1

        byte[] car=new byte[1];

        //int len=is.read(car);

        int len=-1;

        while((len=is.read(car))!=-1){

        System.out.println(new String(car,0,len));

        }

        // 關閉

        is.close();

        }

        }

        (2) 字節輸出流: OutputStream    此抽象類是表示輸出字節流的所有類的超類

        FileOutputStream     文件輸出流是用于將數據寫入 File 的輸出流

        // 字節輸出流 OutputStream

        // 導包 導包快捷鍵: ctrl+shift+o

        import java.io.FileNotFoundException;

        import java.io.FileOutputStream;

        import java.io.IOException;

        import java.io.OutputStream;

        public class Demo02 {

        public static void main(String[] args) {

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

        //FileOutputStream(String name,boolean append)   創建一個向具有指定 name 的文件中寫入外匯返傭http://www.fx61.com/數據的輸出文件流

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

        //boolean append 返回值:true 追加 ,false 不追加 ( 默認 false)

        OutputStream os=null;

        //try...catch(){} 捕捉異常,處理異常

        try {

        //1. 選擇流

        os=new FileOutputStream("D:/hhh.txt",hhtrue); // 文件不存在 , 系統會自動幫我們創建 , 但文件夾不會

        //2. 準備數據

        String str=" 要好好學習,天天向上 ...";

        byte[] c =str.getBytes();

        //3. 寫出 void write(byte[] b)  

        os.write(ch);

        //4. 刷出

        os.flush();

        } catch (FileNotFoundException e) {

        e.printStackTrace();

        } catch (IOException e) {

        e.printStackTrace();

        } finally{

        //5. 關閉

        try {// 預防空指針異常

        if(os!=null){

        os.close();

        }

        } catch (IOException e) {

        e.printStackTrace();

        }

        }

        }

        }

        3. 字符流 :

        只能操作純文本

        1) 節點流 :

        (1) 字符輸入流: Reader 讀取字符流的抽象類

        FileReader   用來讀取字符文件的便捷類

        // 字符輸入流 Reader

        // 導包 導包快捷鍵: ctrl+shift+o

        import java.io.FileNotFoundException;

        import java.io.FileReader;

        import java.io.IOException;

        import java.io.Reader;

        public class Demo03 {

        public static void main(String[] args) {

        //FileReader(String fileName)

        Reader rd=null;

        try {

        //1. 選擇流

        rd=new FileReader("D:/hehe.txt");// 創建 D 盤符的根目錄下的文件

        //2. 讀入

        // 方法 1 int read() 讀取單個字符。

        /*System.out.println((char)rd.read());

        System.out.println((char)rd.read());

        System.out.println((char)rd.read());

        System.out.println((char)rd.read());*/

        int len=-1;  // 存儲讀到的數據  如果為 -1, 證明已達到末尾

        // 方法 2:

        /*while(-1!=(len=rd.read())){

        System.out.println((char)len);

        }*/

        // 方法 3 int read(char[] cbuf)   將字符讀入數組。

        char[] car=new char[1024];

        while((len=rd.read(car))!=-1){

        System.out.println(new String(car,0,len));

        }

        } catch (FileNotFoundException e) {

        e.printStackTrace();

        } catch (IOException e) {

        e.printStackTrace();

        } finally{

        if(rd!=null){

        try {

        // 關閉功能

        rd.close();

        } catch (IOException e) {

        e.printStackTrace();

        }

        }

        }

        }

        }

        (2) 字符輸出流 : Writer 寫入字符流的抽象類

        FileWriter   用來寫入字符文件的便捷類

        // 字符輸出流: Writer

        // 導包 導包快捷鍵: ctrl+shift+o

        import java.io.FileNotFoundException;

        import java.io.FileReader;

        import java.io.FileWriter;

        import java.io.IOException;

        import java.io.Reader;

        import java.io.Writer;

        public class CharDemo02 {

        public static void main(String[] args) {

        //FileWriter(File file)         // 默認不追加

        //FileWriter(File file, boolean append)  

        //FileWriter(String file)  

        //FileWriter(String file, boolean append)  

        Writer rt=null;

        try {

        //1. 選擇流

        rt=new FileWriter("D:/houhou.txt",true);

        //2. 寫出

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

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

        void write(int c) 寫入單個字符

        void write(String str)   寫入字符串

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

        */

        rt.write(97);

        rt.write("\r\n");           // 換行

        rt.write(" 你真好看 !!!!");

        rt.write("\r\n");

        rt.write(" 你真好看 !!!!",2,2);

        rt.write("\r\n");

        char[] ch={'a','b','c','d','e'};

        rt.write(ch);

        rt.write("\r\n");

        rt.write(ch,2,3);

        //3. 刷出

        rt.flush();  

        } catch (IOException e) {

        e.printStackTrace();

        } finally{

        //4. 關閉

        if(null!=rt){

        try {

        rt.close();

        } catch (IOException e) {

        e.printStackTrace();

        }

        }

        }

        }

        }

        4. 功能流 ( 節點流 ):

        緩沖流: 增強功能,提高性能,加快讀寫效率

        1 )字節流:

        BufferedInputStream 字節輸入流緩沖流

        BufferedOutputStream 字節輸出流緩沖流

        沒有新增方法,可以發生多態使用

        // 導包

        import java.io.BufferedInputStream;

        import java.io.BufferedOutputStream;

        import java.io.FileInputStream;

        import java.io.FileNotFoundException;

        import java.io.FileOutputStream;

        import java.io.IOException;

        import java.io.InputStream;

        import java.io.OutputStream;

        public class BufferedInputStream01 {

        public static void main(String[] args) throws IOException {

        //1. 選擇流

        //BufferedInputStream(InputStream in)

        InputStream is=new BufferedInputStream(new FileInputStream("D:/hehe.txt"));

        OutputStream os=new BufferedOutputStream(new FileOutputStream("E:/hengheng.txt") );

        //2. 讀寫

        byte[] car=new byte[1024];

        int len=-1;

        while((len=is.read(car))!=-1){

        os.write(car,0,len);

        }

        //3. 刷出

        os.flush();

        //4. 關閉

        os.close();

        is.close();

        }

        }

        2 )字符流 :

        BufferedReader 字符輸入流緩沖流  

        新增方法: String readLine() 讀取一個文本行

        BufferedWriter 字符輸出流緩沖流

        新增方法: void newLine()   寫入一個行分隔符

        // 導包

        import java.io.BufferedReader;

        import java.io.BufferedWriter;

        import java.io.FileReader;

        import java.io.FileWriter;

        import java.io.IOException;

        public class BufferedReader02 {

        public static void main(String[] args) throws IOException {

        //1. 選擇流  導包快捷鍵 : ctrl+shift+o

        BufferedReader br=new BufferedReader(new FileReader("D:/hehe.txt"));

        BufferedWriter bw=new BufferedWriter(new FileWriter("D:/ccc.txt"));

        //2. 讀寫

        String msg=null;

        while((msg=br.readLine())!=null){

        bw.write(msg);

        bw.newLine();

        }

        //3. 刷出

        bw.flush();

        //4. 關閉

        bw.close();

        br.close();

        }

        }

        二、File

        File 類:文件和目錄路徑名的抽象表示形式

        提供的功能:操作文件外部的能力, 不能操作文件內部的內容

        能夠定義真實存在的路徑| 文件 , 不在的也可以定義 , 所以抽象表現形式

        構造器: File(File parent, String child)    根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例

             File(String pathname)   通過將給定路徑名字符串轉換為抽象路徑名來創建一個新 File 實例

            File(String parent, String child)    根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例

        來自 “ ITPUB博客 ” ,鏈接:http://www.ep4tq.com/69946279/viewspace-2662078/,如需轉載,請注明出處,否則將追究法律責任。

        請登錄后發表評論 登錄
        全部評論
        管他誰是誰非,做自己的主宰,我是這條街最亮的崽!

        注冊時間:2019-08-22

        • 博文量
          49
        • 訪問量
          21835
        妹子图每日分享