<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # JAVA之旅(二十五)——文件復制,字符流的緩沖區,BufferedWriter,BufferedReader,通過緩沖區復制文件,readLine工作原理,自定義readLine * * * > 我們繼續IO上個篇幅講 ## 一.文本復制 > 讀寫都說了,我們來看下其他的操作,我們首先來看復制 * 復制原理:其實就是將C盤下的文件數據存儲到D盤的一個文件中 > 實現的步驟:? > 1.在D盤創建一個文件,用于存儲文件中的數據? > 2.定義讀取流和文件關聯? > 3.通過不斷的讀寫完成數據的存儲? > 關閉資源 ~~~ package com.lgl.hellojava; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class HelloJJAVA { public static void main(String[] args) { copy_1(); copy_2(); } // 從c盤讀一個字符,就往D盤寫一個字符 public static void copy_1() { try { // 創建目的地 FileWriter fw = new FileWriter("copy_1.txt"); // 與已有文件關聯 FileReader fr = new FileReader("copy_1.txt"); int ch = 0; while ((ch = fr.read()) != -1) { // 讀一個 寫一個 fw.write(ch); } fw.close(); fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void copy_2() { FileWriter fw = null; FileReader fr = null; try { fw = new FileWriter("copy_2.txt"); fr = new FileReader("copy_2.txt"); char[] buf = new char[1024]; int len = 0; while ((len = fr.read(buf)) != -1) { fw.write(buf, 0, len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (fr != null) { try { fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (fw != null) { try { fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } ~~~ > 這里做了兩種方式的拷貝方式,其實都是整理好思路,讀和寫的一個過程罷了! ## 二.字符流的緩沖區 > 字符流的緩沖區,提高了對數據的讀寫效率,他有兩個子類 * BufferedWriter * BufferedReader? > 緩沖區要結合柳才可以使用? > 在流的基礎上對流的功能進行了增強 ### 1.BufferedWriter ![這里寫圖片描述](http://img.blog.csdn.net/20160702170355221) > 緩沖區的出現是提高流的效率而出現的,所以在創建緩沖區之前,必須先有流對象,我們看例子 ~~~ package com.lgl.hellojava; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class HelloJJAVA { public static void main(String[] args) { try { // 創建一個字符寫入流對象 FileWriter fw = new FileWriter("buffer.txt"); // 為了提高寫入流的效率加入了緩沖技術 BufferedWriter bufw = new BufferedWriter(fw); //寫入數據 bufw.write("hello"); //換行 bufw.newLine(); //只要用到了緩沖區,就需要刷新 bufw.flush(); //緩沖區關閉的就是關聯的流 bufw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ > 使用都是比較基礎的,大家也是可以看到 ### 2.BufferedReader > 高效讀取 ![這里寫圖片描述](http://img.blog.csdn.net/20160702170544941) > 我們直接看代碼 ~~~ package com.lgl.hellojava; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class HelloJJAVA { public static void main(String[] args) { try { // 創建一個讀取流對象和文件相關聯 FileReader fr = new FileReader("buffer.txt"); // 為了提高效率,加入緩沖技術 BufferedReader bfr = new BufferedReader(fr); String line = null; while((line = bfr.readLine()) != null){ System.out.println(line); } bfr.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ > 這樣就可以全部出來了 ## 三.通過緩沖區復制文件 > OK,我們還是復制文件這個問題,現在我們有緩沖區,我們要怎么樣復制文件? ~~~ package com.lgl.hellojava; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class HelloJJAVA { public static void main(String[] args) { /** * 緩沖區文件復制 */ BufferedReader bufr = null; BufferedWriter bufw = null; try { bufr = new BufferedReader(new FileReader("buffer.txt")); bufw = new BufferedWriter(new FileWriter("buffercopy.txt")); String line = null; while((line = bufr.readLine()) != null){ bufw.write(line); } //關閉流 bufr.close(); bufw.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ > 這樣,就可以復制文件了 ## 四.readLine工作原理 > 我們注意到我們要使用這個方法readline,無論是讀一行還是讀多個字符,其實都是在硬盤上一個一個讀取,所以最終使用的還是read方法一個讀一個的方法 * 其實他內存中有一個數組,你讀完之后并沒有立馬讀,而是臨時存儲起來,這就是緩沖區, ![這里寫圖片描述](http://img.blog.csdn.net/20160702173638937) > 當讀到換行,才去返回一行數據,就這樣一行一行的讀取,這就是他的工作原理 ## 五.自定義readLine > 我們了解了readLine的工作原理,那我們就可以嘗試去更改他了,自定義一個怎么樣?我們嘗試一下 ~~~ package com.lgl.hellojava; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class HelloJJAVA { public static void main(String[] args) { /** * 自定義readLine */ FileReader fr; try { fr = new FileReader("buffer.txt"); MyBufferReader my = new MyBufferReader(fr); String line = null; while ((line = my.myReadLine()) != null) { System.out.println(line); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class MyBufferReader { private FileReader fr; public MyBufferReader(FileReader fr) { this.fr = fr; } // 一次讀取一行的方法 public String myReadLine() throws IOException { // 定義臨時容器 StringBuilder sb = new StringBuilder(); int ch = 0; while ((ch = fr.read()) != -1) { if (ch == '\r') { continue; } else if (ch == '\n') { return sb.toString(); } else { sb.append((char) ch); } } if(sb.length() != 0){ return sb.toString(); } return null; } public void close() throws IOException { fr.close(); } } ~~~ > 仔細看實現思路,靜靜的看,沒錯,我們也是可以實現的,好的,我們本篇到這里也OK,算是結束了,我們下一篇繼續會將IO的,畢竟這是一個大知識點! ## 有興趣可以加群:555974449 版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看