java io 學習

     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) ;    // 保存內容
        }
相關文章
相關標籤/搜索