java file inputstream string 相互轉換

[java]  view plain copy print ?
  1. InputStream is = Thread.currentThread().getContextClassLoader()  
  2.                 .getResourceAsStream("io/aa.txt");  
  3.         String str = IOUtils.toString(is);  
  4.         System.out.println(str);  
  5.         File file = new File("fa");  
  6.         FileUtils.writeStringToFile(file, str);  
  7.         System.out.println(FileUtils.readFileToString(file));  
  8.         FileUtils.forceDeleteOnExit(file);  

利用IOUTILS和FILEUTILS很方便的在FILE STRING 和 INPUTSTREAM之間進行轉換java

 

[java]  view plain copy print ?
  1. InputStream is = Thread.currentThread().getContextClassLoader()  
  2.         .getResourceAsStream("io/aa.txt");  
  3.         InputStreamReader isr = new InputStreamReader(is);  
  4.         //int defaultCharBufferSize = 1024*8;  
  5.         //BufferedReader br = new BufferedReader(isr,defaultCharBufferSize);  
  6.         BufferedReader br = new BufferedReader(isr);  
  7.         String data = null
  8. 2:
  9.     FileReader f_reader = new FileReader(new File("a.txt"));
    BufferedReader reader = new BufferedReader(f_reader);
    String str = null;
    while ((str = reader.readLine()) != null) 
    {
    str = reader.readLine();
    is = new ByteArrayInputStream(str.getBytes("UTF-8"));
    m_zipper.writeFile(is);
    is.close();
    }
 
    1. InputStreamReader是字節流轉成字符流的橋樑用來處理文本文件 

      利用BufferedReader包裝InputStreamReader達到較好的性能 
      BufferedReader的readLine爲讀行數組

       

      1 ) File 類介紹 

      File 類封裝了對用戶機器的文件系統進行操做的功能。例如,能夠用 File 類得到文件上次修改的時間移動, 

      或者對文件進行刪除、重命名。換句話說,流類關注的是文件內容,而 File 類關注的是文件在磁盤上的存儲 

      File 類的主要方法有(),lastMod: getName(),getCanonicalFileified(),isDerector(),isFile(),getPath() 等; 


      2 ) File 類與 FileInputStream 類的區別: 

      流類關注的是文件內容,而 File 類關注的是文件在磁盤上的存儲。 
      File 不屬於文件流 , 只能表明一個文件或是目錄的路徑名而已。 
      提示: 

      若是處理文件或者目錄名,就應該使用 File 對象,而不是字符串。例如, File 類的 equals 方法知道一些 

      文件系統對大小寫是敏感的,目錄尾的「 / 」字符可有可無。 

      FileInputStream 類或者 FileReader 類的構造函數有多個,其中典型的兩個分別爲:一個使用 File 對象爲參數;而另外一個使用表示路徑的 String 對象做爲參數;本身之前一直以爲直接用了 String 指定路徑就能夠了,一直不明白爲何不少人都先構造一個 File 對象,如今終於明白了,「若是處理文件或者目錄名,就應該使用 File 對象,而不是字符串。」! 

      FileInputStream 類 服務器

       

      1 ) FileInputStream 類介紹: 

      以字節爲單位的流處理。字節序列:二進制數據。與編碼無關,不存在亂碼問題。 

      FileInputStream 類的主要方法有: 

      Read (), read ( byte[] b ), read ( byte[],int off,int len ) ,available(); 
      2 ) FileInputStream 類與 FileReader 類的區別: 函數

      兩個類的構造函數的形式和參數都是相同的,參數爲 File 對象或者表示路徑的 String ,它們到底有何區別 呢? 
      FileInputStream :以字節流方式讀取; 性能

      FileReader :把文件轉換爲字符流讀入; 
      InputStream提供的是字節流的讀取,而非文本讀取,這是和Reader類的根本區別。用Reader讀取出 

      來的是char數組或者String ,使用InputStream讀取出來的是byte數組。 


      Reader類及其子類提供的字符流的讀取char,inputStream及其子類提供字節流的讀取byte,因此 FileReader類是將文件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件;InputStreamReader能夠將讀如stream轉換成字符流方式,是reader和stream之間的橋樑 
      最初Java是不支持對文本文件的處理的,爲了彌補這個缺憾而引入了Reader和Writer兩個類。 編碼

       

      FileInputStream 類以二進制輸入 / 輸出, I/O 速度快且效率搞,可是它的 read ()方法讀到 

      的是一個字節,很不利於人們閱讀。 而 FileReader 類彌補了這個缺陷,能夠以文本格式輸入/ 輸出,很是方便;好比可使用 while((ch = filereader.read())!=-1 ) 循環來讀取文件;可使用BufferedReader 的 readLine() 方法一行一行的讀取文本。 

      當咱們讀寫文本文件的時候,採用 Reader 是很是方便的,好比 FileReader , InputStreamReader 和 BufferedReader 。其中最重要的類是 InputStreamReader ,它是字節轉換爲字符的橋樑。 你能夠在構造器中指定編碼的方式,若是不指定的話將採用底層操做系統的默認編碼方式,例如 GBK 等。 

      FileReader 與 InputStreamReader 涉及編碼轉換 ( 指定編碼方式或者採用 os 默認編碼 ) ,可能在不一樣的平臺上出現亂碼現象!而 FileInputStream 以二進制方式處理,不會出現亂碼現象 . spa

      若是處理純文本文件,建議使用 FileReader ,由於更方便,也更適合閱讀;可是要注意編碼問題!其餘狀況(處理非純文本文件),FileInputStream是惟一的選擇;FileInputStream是進Socket通信時會用到不少,如將文件流是Stream的方式傳向服務器! 
      FileReader 類 
      FileReader 類介紹: 
      InputStreamReader 類的子類,全部方法(read ()等)都從父類 InputStreamReader 中繼承來; 
      與 InputStreamReader 類的區別: 
      該類與它的父類 InputStreamReader 的主要不一樣在於構造函數,主要區別也就在於構造函數!從 InputStreamReader 的構造函數中看到,參數爲 InputStream 和編碼方式,能夠看出,當要指定編碼方式時,必須使用 InputStreamReader 類;而 FileReader 構造函數的參數與 FileInputStream 同,爲 File 對象或表示 path 的 String ,能夠看出,當要根據 File 對象或者 String 讀取一個文件時,用 FileReader 我想FileReader 子類的做用也就在於這個小分工吧。 

      通常用法: 操作系統

      FileReader fr = new FileReader("ming.txt"); 
         char[] buffer = new char[1024]; 
         int ch = 0; 
         while((ch = fr.read())!=-1 ) 
         { 
          System.out.print((char)ch); 
         } 

      InputStreamReader 類 

      以文本格式輸入 / 輸出,能夠指定編碼格式; 

      主要方法: 

      getEncoding (),read(); 

      通常用法: 

      InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt")); 
         while((ch = isr.read())!=-1) 
         { 
          System.out.print((char)ch); 
         } 
      BufferedReader 類 .net

      BufferedReader 由Reader類擴展而來,提供通用的緩衝方式文本讀取,並且提供了很實用的readLine, 
      讀取分行文本很適合,BufferedReader是針對Reader的,不直接針對文件,也不是隻針對文件讀取。 
      通常用法:  
      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt"))); 
        String data = null; 
        while((data = br.readLine())!=null) 
        { 
         System.out.println(data); 
        } 
         

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

      1)    File file = new File ("hello.txt"); 

      FileInputStream in=new FileInputStream(file); 

      2)    File file = new File ("hello.txt"); 

      FileInputStream in=new FileInputStream(file); 

      InputStreamReader inReader=new InputStreamReader(in); 

      BufferedReader bufReader=new BufferedReader(inReader); 對象

      3)    File file = new File ("hello.txt"); 

      FileReader fileReader=new FileReader(file); 

      BufferedReader bufReader=new BufferedReader(fileReader); 
      1) 
      File file = new File ("hello.txt"); 
      FileInputStream in=new FileInputStream(file); 
      InputStreamReader inReader=new InputStreamReader(in); 
      BufferedReader bufReader=new BufferedReader(inReader); 
      2) 
      FileInputStream in=null; 
      File file = new File ("hello.txt"); 
      in=new FileInputStream(file); 
      BufferedReader bufReader=new BufferedReader(new InputStreamReader(in)); 
      3) 
      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,而後用第三種方式也行,但彷佛這適合有用戶界面的狀況,把異常拋出在客戶端在處理。

相關文章
相關標籤/搜索