1. 程式人生 > >IO 流的常用總結

IO 流的常用總結

IO 流主要是用來處理裝置之間的資料傳輸,Java對於資料的操作都是通過流實現,而java用於操作流的物件都在IO包中。

IO流常用的基類:

     * InputStream        OutputStream

字元流的抽象基類:

     * Reader               Writer

由上面四個類派生的子類名稱都是以其父類名作為子類的字尾:

   如:FileReader、FileWriter、FileInputStream、FileOutputStream

當然還有一些緩衝流:

    如:BufferedReader、BufferedWriter、BufferedInputStream 、BufferedOutputStream

緩衝的作用都是為了提高效率,拓展功能!

IO 流常用的操作方法:

// 輸入位元組流
public static void readTest4() throws IOException{          

    File file = new File("F:\\a.txt");        //找到目標檔案

    FileInputStream fis = new FileInputStream(file);   //建立資料輸入通道

    int length = 0;    //為什麼要用length ?下面會提到

    byte[] buf = new byte[4];  //建立緩衝陣列,一次讀取4個長度,最後如不夠4個長度,只讀取剩下的長度內容
while((length = fis.read(buf))!=-1){ System.out.print(new String(buf,0,length)); } fis.close(); } // 輸入字元流 public static void readTest1() throws IOException{ File file = new File("E:\\a.txt"); FileReader fr = new FileReader(file); int
length=0; char[] buf = new char[1024]; while((length=fr.read(buf))!=-1){ System.out.print(new String(buf,0,length)); } //緩衝輸入位元組流 public static void readTest1() throws IOException{ File file = new File("F:\\a.txt"); //找到目標檔案 FileInputStream fis = new FileInputStream(file); //建立資料輸入通道 BufferedInputStream bis = new BufferedInputStream(fis); //建立緩衝輸入位元組流 int content = 0; while((content=bis.read())!=-1){ System.out.print((char)content); } bis.close(); } //緩衝輸入字元流 public static void readTest1() throws IOException{ File file = new File("E:\\a.txt"); //找到目標檔案 FileReader fr = new FileReader(file); //建立資料輸入通道 BufferedReader br = new BufferedReader(fr); String line = null; while((line=br.readLine())!=null){ //readline一次讀取一行 System.out.print(line); } br.close(); } //輸出位元組流 public static void writeTest2() throws IOException{ File file = new File("F:\\a.txt"); //找到目標檔案,如果不存在,自動建立,如果存在,先清空資料再寫入 FileOutputStream fos = new FileOutputStream(file,true); //建立資料輸出通道,加true表示不清空,在原檔案後面新增 String data="hello word"; fos.write(data.getBytes()); fos.close(); } //輸出字元流 public static void writerTest1() throws IOException{ File file = new File("E:\\a.txt"); FileWriter fw = new FileWriter(file); String data="今天很好!"; fw.write(data); fw.close(); } //緩衝輸出位元組流 public static void writeTest1() throws IOException{ File file = new File("F:\\a.txt"); //找到目標檔案 FileOutputStream fos = new FileOutputStream(file); //建立資料輸入通道 BufferedOutputStream bos = new BufferedOutputStream(fos); //建立緩衝輸入位元組流 bos.write("hello world".getbytes()); bos.close(); //只有呼叫close方法才會寫到硬碟,否則只是寫到內部的位元組陣列中 } //緩衝輸出字元流 public static void writerTest1() throws IOException{ File file = new File("E:\\a.txt"); //找到目標檔案 FileWriter fw = new FileWriter(file); //建立資料輸出通道 BufferedWriter bw = new BufferedWriter(fw); bw.write("大家好!"); bw.close(); }

至於為什麼要用length ?

  public static void runio() throws IOException{

        File file=new File("E:\\a.txt");

        FileInputStream fis=new FileInputStream(file);

        byte[] bytes= new  byte[4];

        int length=-1;

        while ((length=fis.read(bytes,0,2))!=-1){
            //雖然陣列長度為4,但是這裡我們設定了2所以每次輸出2
            System.out.println(length);
            //因為每次得到的是新的陣列,所以每次都是新陣列的"0-length"
            System.out.println(new String(bytes,0,length));

        }

    }
//上述只是讀資料,當寫資料時:

 public static void runio() throws IOException{

        File file=new File("E:\\a.txt");
        FileInputStream fis=new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream("E:\\b.txt");

        byte[] bytes= new  byte[4];

        int length=-1;

        while ((length=fis.read(bytes,0,2))!=-1){
            //往流裡邊寫入緩衝位元組陣列中的所有內容,,如果不使用length,不滿整個陣列長度的”空餘內容”也會加入
            fos.write(bytes,0,length);

        }

    }