java io 學習

來源:互聯網
上載者:User

標籤:tor   cat   拷貝   類型   [1]   rac   blog   ringbuf   空間   

     1,io 體系在整個Java.io包中最重要的就是5個類和一個介面。5個類指的是 File、OutputStream、InputStream、Writer、Reader;一個介面指的是 Serializable.掌握了這些IO的核心操作那麼對於Java中的IO體系也就有了一個初步的認識了。     Java.io包中定義了多個流類型類實現輸入輸出的功能,從不同的角度可以分為:  ~按照資料流方向的不同可以分為 輸入資料流輸出資料流。  ~按照按照資料處理單位的不同可以分為 位元組流字元流。如下幾張圖可以直觀的描述io體系中的大部分類和關係.根據類名稱就可以知道這個類大體是操作什麼的.

 

 

    ,2,一個簡單的檔案複製執行個體
            File f1 = new File(args[0]); // 源檔案的File對象            File f2 = new File(args[1]); // 目標檔案的File對象            InputStream input = null; // 準備好輸入資料流對象,讀取源檔案            OutputStream out = null; // 準備好輸出資料流對象,寫入目標檔案            input = new FileInputStream(f1);            out = new FileOutputStream(f2);            int temp = 0;            while ((temp = input.read()) != -1) { // 開始拷貝                out.write(temp); // 邊讀邊寫            }            input.close(); // 關閉            out.close(); // 關閉

 

      3,其他相關類     System類對io的支援     system.out其實就是一個列印流printstream,輸出對象就是控制台,system.err也一樣是printstream,兩個其實沒有區別,只是邏輯上err來處理錯誤的資訊而已     system.in其實就是一個inputstream,輸入的源是鍵盤等裝置而已,在程式中直接用來當做inputstream來擷取資料即可,在等待擷取資料的時候,線程阻塞等待.     並且system類也提供了setout setin的方法,可以讓使用者自己定義資料的來源和去處.不過一般上也不去修改這個東西.
        InputStream input = System.in ;    // 從鍵盤接收資料        byte b[] = new byte[5] ;    // 開闢空間,接收資料        System.out.print("請輸入內容:") ;    // 提示資訊        int len = input.read(b) ;    // 接收資料        System.out.println("輸入的內容為:" + new String(b,0,len)) ;        input.close() ;    // 關閉輸入資料流

 

 bufferdreader類,用於從緩衝區中讀取內容,先把從inputstream中讀取到的位元組資料放入到緩衝區然後在讀出來.他的構造方法只能夠接受字元輸入資料流的執行個體,因此需要先用inputstreamreader將inputstream轉換成reader後,使用,這裡其實就體現了javaio體系中使用的一種設計模式,裝飾模式( 在不必改變原類檔案和使用繼承的情況下,動態地擴充一個對象的功能。它是通過建立一個封裝對象,也就是裝飾來包裹真實的對象。)
        BufferedReader buf = null ;        // 聲明對象        buf = new BufferedReader(new InputStreamReader(System.in)) ;    // 將位元組流變為字元流        String str = null ;    // 接收輸入內容        System.out.print("請輸入內容:") ;        try{            str = buf.readLine() ;    // 讀取一行資料        }catch(IOException e){            e.printStackTrace() ;    // 輸出資訊        }        System.out.println("輸入的內容為:" + str) ;

 

  scanner類,是java提供的專門方便使用 的輸入資料類,還可以方便的對輸入的資料進行驗證,他的構造方法支援一個file參數或者一個inputstream參數,使用的時候,直接使用next系列方法,即可獲得流中對應的資料.
        File f = new File("D:" + File.separator + "test.txt"); // 指定操作檔案        Scanner scan = null;        scan = new Scanner(f); // 從鍵盤接收資料        StringBuffer str = new StringBuffer();        while (scan.hasNext()) {            str.append(scan.next()).append(‘\n‘); // 取資料            System.out.println("檔案內容為:" + str);        }

 

 SequenceInputStream合并流,主要是講兩個檔案內容合并一個.
        InputStream is1 = null ;        // 輸入資料流1        InputStream is2 = null ;        // 輸入資料流1        OutputStream os = null ;        // 輸出資料流        SequenceInputStream sis = null ;    // 合并流        is1 = new FileInputStream("d:" + File.separator + "a.txt") ;        is2 = new FileInputStream("d:" + File.separator + "b.txt") ;        os = new FileOutputStream("d:" + File.separator + "ab.txt") ;        sis = new SequenceInputStream(is1,is2) ;    // 執行個體化合并流        int temp = 0 ;    // 接收內容        while((temp=sis.read())!=-1){    // 迴圈輸出            os.write(temp) ;    // 儲存內容        }

 

 

java io 學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.