標籤: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 學習