天天看點

java中IO操作 利用檔案流 過濾流對檔案進行讀寫操作

/*

兩種基本的流是:輸入流(Input Stream)和輸出流(Output Stream)

。可從中讀出一系列位元組的對象稱為輸入流。

而能向其中寫入一系列位元組的對象稱為輸出流。

System.out.println   中的 out 是 PrintStream 類對象   System類的靜态成員可以向 輸出流寫入資料

System.in.read()     in 是InputStream類的成員 可以從鍵盤等輸入裝置讀取位元組資料 

利用FileInputStream   FileOutputStram就可以完成對檔案的讀寫操作

這些類從 InputStream 和 OutPutStram派生來  重寫了 read 和write方法

*/

import  java.io.* ;

class  StreamTest

{

 public static  void main(String []args)  throws Exception

 {

   /* 代碼1:      int  data  ;

           while((data=System.in.read())!=-1)  //Ctrl+C

           {

                 System.out.write((char)data); //一次向輸入流寫一個位元組

                 //這裡有一個疑問是為什麼每次寫入一個位元組但是隻有回車的時候

                //  才回輸出輸入資訊  ?

                 //因為我們是向輸出流裡面寫入資料  因為在輸入回車之前資料都是通過write寫入到了

                  //流當中并沒有直接輸出到螢幕  隻有回車之後提示輸入結束  那麼 緩沖區資料将 全部

                 // 列印到螢幕      

            }

      */

               /*  代碼2

                 下面來對檔案進行讀寫 

                  FileInputStream 和 FileOutPutStram派生來  重寫了 read 和write方法  

              FileOutputStream   fop=new  FileOutputStream("output.txt",true);  //建立一個 與output.txt關聯的檔案流 會建立一個檔案在目前目錄下 檔案追加形式

              fop.close() ;//關閉輸出流

              FileInputStream   fis=new  FileInputStream("output.txt");

              int data ;

              byte []buf=new byte[100];

              int len=fis.read(buf,0,100); //讀取100位元組的資料傳回實際讀取的位元組數

              System.out.println(new  String(buf,0,len));  //因為是位元組數組 是以通過 new String()重載方法實作

              fis.close() ;//關閉輸入流

          */

             //代碼3  過濾流 在一個流的基礎上 連接配接另外一個流 到緩沖區 要flush 或者 close過濾流才能從緩沖區寫出

             //BufferedInputStream    BufferedOutputStream 

             //其實過濾流就是在在原來的流的基礎上連接配接了一個流 通過原來流的資料會先經過過濾流我們進而能對原來的

             //流資料進行修改操作

             // 因為buffered提供了一個緩沖的讀寫 是以資料都會先經過一個緩沖區 再到原來的流中

              FileOutputStream   fop=new  FileOutputStream("output.txt",true);  

              BufferedOutputStream bos=new  BufferedOutputStream(fop);//建立一個過濾輸出流  資料是經過這個流寫到标準輸出流

              bos.flush() ;   //如果不重新整理或關閉 過濾流那麼 就不會輸出到 檔案輸出流 進而不會輸出到檔案

              FileInputStream fis=new FileInputStream("output.txt");  //建立檔案輸入流

              BufferedInputStream  bis=new BufferedInputStream(fis);

              int len=bis.read(buf,0,100);//從過濾流讀取資料

              System.out.println(new String(buf,0,len)) ;  //從過濾流讀取資料

              bis.close() //關閉過濾流

 }

}