日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

File,FileInputStream,FileReader,InputStreamReader,BufferReader 的区别使用

發布時間:2024/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 File,FileInputStream,FileReader,InputStreamReader,BufferReader 的区别使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • File 類介紹

    File 類封裝了對用戶機器的文件系統進行操作的功能。例如,可以用 File 類獲得文件上次修改的時間,移動,或者對文件進行刪除、重命名。換句話說,流類關注的是文件內容,而 File 類關注的是文件在磁盤上的存儲。主要方法有lastModified(),getName(),getCanonicalFileified(),isDerector(),isFile(),getPath() 等;


  • FileInputStream 類

    以字節為單位的流處理。字節序列:二進制數據。與編碼無關,不存在亂碼問題。主要方法有read(),read(byte[] b),read(byte[],int off,int len),available()


    File 類與 FileInputStream 類的區別:

    流類關注的是文件內容,而 File 類關注的是文件在磁盤上的存儲.File 不屬于文件流 , 只能代表一個文件或是目錄的路徑名而已.FileInputStream的構造函數,可以為File對象,或者該File的String地址


  • InputStreamReader 類

    以文本格式輸入 / 輸出,可以指定編碼格式,構造函數參數為inputstream和編碼格式;主要方法: getEncoding (),read();


  • FileReader 類

    把文件轉換為字符流讀入,InputStreamReader 類的子類,所有方法(read ()等)都從父類 InputStreamReader 中繼承來;與 InputStreamReader 類的區別:主要不同在于構造函數!



    FileInputStream類與 FileReader類的區別:

    兩個類的構造函數的形式和參數都是相同的,參數為 File 對象或者表示路徑的 String 。區別在于:Reader類及其子類提供的字符流的讀取char,char[],inputStream及其子類提供字節流的讀取byte,byte[];

    InputStreamReader可以將stream轉換成reader方式,是reader和stream之間的橋梁,如果要指定編碼格式,則只能用InputStreamReader

    不指定編碼時如下?

  • 1 2 3 4 5 6 7 FileReader?fr?=?new?FileReader("ming.txt");??? char[]?buffer?=?new?char[1024];??? int?ch?=?0;??? while((ch?=?fr.read())!=-1?)??? {??? ????System.out.print((char)ch);??? }

    指定編碼時如下

  • 1 2 3 4 5 InputStreamReader?isr?=?new?InputStreamReader(new?FileInputStream("ming.txt"));??? while((ch?=?isr.read())!=-1)??? {??? ????System.out.print((char)ch);??? }
  • BufferedReader 類

    BufferedReader 由Reader類擴展而來,提供通用的緩沖方式文本讀取,而且提供了很實用的readLine,讀取分行文本很適合,BufferedReader是針對Reader的,不直接針對文件,也不是只針對文件讀取。

  • 1 2 3 4 5 6 BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(new?FileInputStream("ming.txt")));??? String?data?=?null;??? while((data?=?br.readLine())!=null)??? {??? ????System.out.println(data);??? }

  • 總結以上內容,得出比較好的規范用法:

    1. ?

    1 2 3 4 File?file?=?new?File?("hello.txt");??? FileInputStream?in=new?FileInputStream(file);??? InputStreamReader?inReader=new?InputStreamReader(in);??? BufferedReader?bufReader=new?BufferedReader(inReader);

    2.

    1 2 3 4 FileInputStream?in=null;??? File?file?=?new?File?("hello.txt");??? in=new?FileInputStream(file);??? BufferedReader?bufReader=new?BufferedReader(new?InputStreamReader(in));

    3.

    1 2 File?file?=?new?File?("hello.txt");??? BufferedReader?bufReader=new?BufferedReader(new?InputStreamReader(new?FileInputStream(file)));

    上述三種寫法其實都一樣,僅有的微小區別:


    a)第二種方式中把“FileInputStream in=null;”定義單獨放在開始處,說明下面應該還有要用到in對象變量的地方;(BufferedReader處用了)


    b)第二種方式沒有定義InputStreamReader的對象變量,直接在BufferedReader的構造函數中new一個,這種方式與第一種方式的主要區別:InputStreamReader對象只使用一次!這對于在這里只需要使用一次這個InputStreamReader對象的應用來說更好;無需定義InputStreamReader的對象變量,接收由new返回的該對象的引用,因為下面的程序中不需要這個InputStreamReader的對象變量,所以無需定義;所以這種情況下,第二種方式比第一種更好一些。


    c)第三種方式中,典型的三層嵌套委派關系,清晰看出Reader的委派模式(《corejava》12章有圖描述該委派關系),FileInputStream和InputStreamReader都沒有定義變量,new生成的對象都只是使用一次。


    d)三種方式的區別也就在于FileInputStream和InputStreamReader對象是否都只使用一次,是否需要定義它們的對象變量,以及個人的編碼習慣。


    e)但是要注意異常處理,FileInputStream(file)會拋出NotFileFoundException,如果采用surround方式(try&catch)處理,應該用第二種方式,這樣可以用System.out.println提示文件未找到;當然在函數名后使用throws Exception,然后用第三種方式也行,但似乎這適合有用戶界面的情況,把異常拋出在客戶端在處理。


    寫文件的方式和讀文件差不多也差不多,類就不介紹了,僅貼出代碼,

    1 2 3 4 5 6 ?String?sql="sdfsdf"; ?FileOutputStream?fileOutputStream?=?new?FileOutputStream("d:/test/cell1.txt");? ?OutputStreamWriter?oWriter?=?new?OutputStreamWriter(fileOutputStream); ?BufferedWriter?bw?=?new?BufferedWriter(oWriter); ?bw.write(sql); ?bw.flush();

    記住,最后的BufferedWriter 一定要記得flush才能寫入文件

    讀取文件,大概就這樣子了。


    終于覺得自己也理清楚了,





    ? ? ? 本文轉自布拉君君 51CTO博客,原文鏈接:http://blog.51cto.com/5148737/1754150,如需轉載請自行聯系原作者




    總結

    以上是生活随笔為你收集整理的File,FileInputStream,FileReader,InputStreamReader,BufferReader 的区别使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。