Java編程中位元組流與字元流IO操作樣本_java

來源:互聯網
上載者:User

 IO流基本概念
IO流用來處理裝置之間的資料轉送
Java對資料的操作是通過流的方式
Java用於操作流的對象都是在IO包上
流按操作資料分為兩種:位元組流和字元流
流按流向分為:輸入資料流,輸出資料流。

位元組流的抽象基類:InputStream,OutputStream
字元流的抽象基類:Reader,Writer
註:由這4個類派生出來的子類名稱都是以其父類名作為子類名的尾碼。
如:InputStream的子類:FileInputStream
如:Reader的子類FileReader
如建立一個FileWriter對象,該對象一被初始化就必須要明確被操作的檔案,而且該檔案就會被建立到指定目錄下,如果該目錄下已有同名檔案,將被覆蓋。
Demo :

package javase.day18;  import java.io.FileWriter; import java.io.IOException;  public class FileWriterDemo {    public static void main(String[] args) {     FileWriter fw=null;     try {       fw = new FileWriter("C:\\java_test\\FileWriterTest.txt");       //調用write 方法,將字串寫入到流中        fw.write("alex test23");       //重新整理流對象中的緩衝中的資料        fw.flush();     } catch (IOException e) {       e.printStackTrace();     } finally{       try {         if(fw!=null){             //關閉流資源,但是關閉之前會重新整理一次內部的緩衝中的資料             fw.close();                }        }catch (IOException e) {         e.printStackTrace();       }           }   } } package javase.day18;  import java.io.FileWriter; import java.io.IOException;  public class FileWriterDemo {    public static void main(String[] args) {     FileWriter fw=null;     try {       fw = new FileWriter("C:\\java_test\\FileWriterTest.txt");       //調用write 方法,將字串寫入到流中       fw.write("alex test23");       //重新整理流對象中的緩衝中的資料       fw.flush();     } catch (IOException e) {       e.printStackTrace();     } finally{       try {         if(fw!=null){             //關閉流資源,但是關閉之前會重新整理一次內部的緩衝中的資料             fw.close();                }        }catch (IOException e) {         e.printStackTrace();       }           }   } } 

列印Java檔案的原始碼Demo code:

package javase.day18;  import java.io.FileReader; import java.io.IOException;  public class FileReaderTest {    public static void main(String[] args) {     try {       FileReader fr=new FileReader("C:\\java_test\\SystemDemo.java");       char[] buf=new char[1024];       int num=0;       while((num=fr.read(buf))!=-1){         System.out.println(new String(buf,0,num));       }     } catch (IOException e) {       e.printStackTrace();     }    }  } package javase.day18;  import java.io.FileReader; import java.io.IOException;  public class FileReaderTest {    public static void main(String[] args) {     try {       FileReader fr=new FileReader("C:\\java_test\\SystemDemo.java");       char[] buf=new char[1024];       int num=0;       while((num=fr.read(buf))!=-1){         System.out.println(new String(buf,0,num));       }     } catch (IOException e) {       e.printStackTrace();     }    }  } 

複製檔案Demo code:
copy_1() 使用的方法是讀取一個字元則寫入一個字元。
copy_2()使用的方法是把字元一次性讀取到一個字元數組中,最後再一次寫入到目標檔案。

package javase.day18;  import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;  public class CopyText {    public static void main(String[] args) {     try {       copy_1();     } catch (IOException e) {       e.printStackTrace();     }   }      public static void copy_1() throws IOException{     FileWriter fw = new FileWriter("C:\\java_test\\Copy_SystemDemo.java");     FileReader fr = new FileReader("C:\\java_test\\SystemDemo.java");     int num=0;     while((num=fr.read())!=-1){       fw.write(num);     }     fw.close();     fr.close();   }      public static void copy_2() throws IOException{     FileWriter fw = new FileWriter("C:\\java_test\\Copy_SystemDemo.java");     FileReader fr = new FileReader("C:\\java_test\\SystemDemo.java");     int num=0;     char[] buf=new char[1024];     while((num=fr.read(buf))!=-1){       fw.write(buf,0,num);     }     fw.close();     fr.close();   }  } package javase.day18;  import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;  public class CopyText {    public static void main(String[] args) {     try {       copy_1();     } catch (IOException e) {       e.printStackTrace();     }   }      public static void copy_1() throws IOException{     FileWriter fw = new FileWriter("C:\\java_test\\Copy_SystemDemo.java");     FileReader fr = new FileReader("C:\\java_test\\SystemDemo.java");     int num=0;     while((num=fr.read())!=-1){       fw.write(num);     }     fw.close();     fr.close();   }      public static void copy_2() throws IOException{     FileWriter fw = new FileWriter("C:\\java_test\\Copy_SystemDemo.java");     FileReader fr = new FileReader("C:\\java_test\\SystemDemo.java");     int num=0;     char[] buf=new char[1024];     while((num=fr.read(buf))!=-1){       fw.write(buf,0,num);     }     fw.close();     fr.close();   }  } 

字元流的緩衝區:
緩衝區的出現提高了對資料的讀寫效率。
對應類:BufferedWriter , BufferedReader .
緩衝區要結合流才可以使用。
在流的基礎上對流的功能進行了增強。

IO流操作的基本規律:
1,明確源和目的:
源: 輸入資料流 InputStream , Reader
目的: 輸出資料流 OutputStream ,Writer
2,操作的資料是否是純文字:
是:字元流
否:位元組流
即:(1) 當為輸入字元流用Reader
(2) 當為輸入位元組流用InputStream
(3)當為輸出字元流用Writer
(4)當為輸出位元組流用OutputStream
3,當體系明確後,再明確要使用哪個具體的對象:
源裝置:記憶體,硬碟,鍵盤
目的裝置:記憶體,硬碟,控制台

IO操作工具類
[1] String fileReaderStringHandle(String fileName)
將檔案(由fileName指定)讀入到一個字串;
[2] byte[] fileReaderByteHandle(String fileName)
將檔案(由fileName指定)讀入到一個位元組數組;
[3] void fileWriterHandle(String fileName, String text)
將字串(由text指定)寫出到一個檔案(由fileName指定)。
IOUtil.java

import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException;import java.io.PrintWriter;public class IOUtil {  /**   * 將檔案讀入到一個String,利用FileReader+BufferedReader(提供readLine方法)   *   * @param fileName   * @return String   */  public static String fileReaderStringHandle(String fileName) {    StringBuilder sb = new StringBuilder();    try {      BufferedReader in = new BufferedReader(new FileReader(new File(         fileName).getAbsoluteFile()));      try {       String s;       while ((s = in.readLine()) != null) {         sb.append(s);         sb.append("\n");       }      } finally {       in.close();      }    } catch (IOException e) {      throw new RuntimeException(e);    }    return sb.toString();  }  /**   * 使用FileInputStream+BufferedInputStream以byte的方式處理檔案   *   * @param fileName   * @return byte[]   */  public static byte[] fileReaderByteHandle(String fileName) {    byte[] data = null;    try {      BufferedInputStream bf = new BufferedInputStream(         new FileInputStream(fileName));      try {       data = new byte[bf.available()];       bf.read(data);      } finally {       bf.close();      }    } catch (IOException e) {      throw new RuntimeException(e);    }    return data == null ? new byte[] {} : data;  }  /**   * 將指定的text寫入到檔案名稱為fileName的檔案中   *   * @param fileName   * @param text   */  public static void fileWriterHandle(String fileName, String text) {    try {      PrintWriter out = new PrintWriter(new File(fileName)         .getAbsoluteFile());      try {       out.print(text);      } finally {       out.close();      }    } catch (IOException e) {      throw new RuntimeException(e);    }  }  public static void main(String[] args) throws IOException {    System.out.print(fileReaderStringHandle("src/IOUtil.java"));       for (byte b : fileReaderByteHandle("src/IOUtil.java"))      System.out.print(b);    fileWriterHandle("zj.txt",       fileReaderStringHandle("src/IOUtil.java"));  }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.