成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java IO學(xué)習(xí)筆記八

NSFish / 2612人閱讀

摘要:通常,所作的每個讀取請求都會導(dǎo)致對底層字符或字節(jié)流進行相應(yīng)的讀取請求。因此,建議用包裝所有其操作可能開銷很高的如和構(gòu)造函數(shù)創(chuàng)建一個使用默認大小輸入緩沖區(qū)的緩沖字符輸入流。

BufferedReader和BufferedWriter

這兩個類是高效率的提高文件的讀取速度,它們?yōu)樽址斎牒洼敵鎏峁┝艘粋€緩沖區(qū),可以顯著的調(diào)高寫入和讀取的速度,特別針對大量的磁盤文件讀取的時候,下面著重的講講這兩個類

BufferedReader

從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取,要特別注意的是這個市針對字符流而不是字節(jié)流。

通常,Reader 所作的每個讀取請求都會導(dǎo)致對底層字符或字節(jié)流進行相應(yīng)的讀取請求。因此,建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReaderInputStreamReader

構(gòu)造函數(shù)

BufferedReader(Reader in) 創(chuàng)建一個使用默認大小輸入緩沖區(qū)的緩沖字符輸入流。

BufferedReader(Reader in, int sz) 創(chuàng)建一個使用指定大小輸入緩沖區(qū)的緩沖字符輸入流。

實例

可以看出構(gòu)造函數(shù)使用了Reader這個抽象類來初始化,我們前面說過這個是針對字符流的讀取,因此可以使用Reader類的兩個子類FileReader,InputStreamReader來初始化

File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");
BufferedReader bufferedReader=new BufferedReader(new FileReader(file));  //使用FileReader實例化
//使用InputStreamReader來實例化
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
常用方法

close()

String readLine() 讀取一行的數(shù)據(jù)

int read() 讀取一個字符,注意這里的和字節(jié)的不一樣,這里的漢字占用了一個字節(jié),前面講到讀取字節(jié)流的時候使用byte讀取漢字占用三個字節(jié)

skip(int n) 跳過n個字節(jié)

ready() 判斷此流是否已準備好被讀取。

實例

用于控制臺的讀取,前面已經(jīng)說過System.in返回的是InputStream類型的,因此可以使用InputStreamReader實例化,當(dāng)然這個有點多余了,我們完全可以使用java.util提供的Scanner直接進行輸入

BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
        String str=bufferedReader.readLine();  //將控制臺輸入的字符串讀取
        System.out.println(str);  //打印出來

用于文件的讀取

 BufferedReader bufferedReader=new BufferedReader(new FileReader(file));
       // BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
//        bufferedReader.skip(2);    //跳過兩個字節(jié)
//        
//        第一種讀取的方式
        while(bufferedReader.ready())     //判斷是否還有字符
        {
            String str=bufferedReader.readLine();   //直接讀取一行
            System.out.println(str);  
        }
        bufferedReader.close();
        
        //第二種讀取方式
        int len=bufferedReader.read();
        while(len!=-1)   //判斷是否讀到文件的末尾
        {
            System.out.print((char)len);  //強制轉(zhuǎn)化成字符
            len=bufferedReader.read();
        }

        
BufferedWriter

將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數(shù)組和字符串的高效寫入。

通常 Writer 將其輸出立即發(fā)送到底層字符或字節(jié)流。除非要求提示輸出,否則建議用 BufferedWriter 包裝所有其 write() 操作可能開銷很高的 Writer(如 FileWritersOutputStreamWriters)。例如

PrintWriter out
   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
構(gòu)造函數(shù)

BufferedWriter(Writer out) 創(chuàng)建一個使用默認大小輸出緩沖區(qū)的緩沖字符輸出流。

BufferedWriter(Writer out, int sz) 創(chuàng)建一個使用給定大小輸出緩沖區(qū)的新緩沖字符輸出流。

File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file));

注意這里的FileWriter是Writer的子類,因此可以使用其實例化

常用函數(shù)

close()

flush()

newLine() 寫入一個與平臺相關(guān)的換行符

write(int data) 寫入一個字符,這里的寫入的不是整數(shù)

write(String str) 寫入一個字符串

write(String str,int off,int len) 寫入部分字符串

write(char[] c)

write(char[] c,int off,int len)

實例
        File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");
        File file1=new File("/tmp"+File.separator+"test");
        File file2=new File("/tmp"+File.separator+"test"+File.separator+"demo.txt");
        if(!file1.exists())
        {
            file1.mkdir();
            System.out.println("文件夾創(chuàng)建成功");
        }
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file));
        String str="陳加兵";
        int data=48;
        String name="chenjiabing";
        char[] chars=name.toCharArray();
        bufferedWriter.write(str);   //寫入一個字符串,當(dāng)然也可以截取這個字符串的某一段
        bufferedWriter.newLine();  //寫入一個平臺自帶的換行符,因為每一個操作系統(tǒng)的換行符都不一樣
        bufferedWriter.write(data);   //寫入的并不是整數(shù),而是這個整數(shù)所代表的字符
        bufferedWriter.newLine();
        bufferedWriter.write(chars,1,4);  //寫入字符數(shù)組
        bufferedWriter.flush();
        bufferedWriter.close()

拓展:通過了上面的學(xué)習(xí),你不覺得使用這個類寫入文件數(shù)據(jù)有點煩了,只能寫入String char類型的數(shù)據(jù),此時我們就想到了前面說過的打印流(PrintWriter),這是一個便捷的寫入文件的類,可以指定任意格式任意類型的數(shù)據(jù),同樣是輸出流,我么可以將他們結(jié)合起來,構(gòu)成一個更加強大的輸出流,如下:

        File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");
        //用BufferedWriter實例化PrintWriter,顯著提高寫入的效率
        PrintWriter printWriter=new PrintWriter(new BufferedWriter(new FileWriter(file)));
        String name="陳加兵";
        int age=22;
        float grade=99.9f;
        printWriter.printf("姓名:%s,年齡:%s,grade:%s",name,age,grade);  //格式化的寫入
        printWriter.close();
綜合實例

將一個文件中數(shù)據(jù)轉(zhuǎn)移到另外一個文件中

package IO;

import java.io.*;

/**
 * Created by chenjiabing on 17-5-26.
 */
public class demo13 {

    /**
     * 常用函數(shù):
     * newLine()
     * write(String str)
     * write(String str,int off,int len)
     * write(Char[] c)
     * write(Char[] c,int off,int len)
     * write(int data)
     * close()
     * flush()
     */
    public static void main(String[] args) throws IOException {
        File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt");
        File file1 = new File("/tmp" + File.separator + "test");
        File file2 = new File("/tmp" + File.separator + "test" + File.separator + "demo.txt");
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file2));
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

        while (bufferedReader.ready()) {
            String str = bufferedReader.readLine();  //讀取文件test.txt中的一行數(shù)據(jù)
            bufferedWriter.write(str);   //將這一行數(shù)據(jù)寫入文件demo.txt
            bufferedWriter.newLine();
        }
        bufferedReader.close();
        bufferedWriter.flush();
        bufferedWriter.close();


    }
}
參考文章

http://ifeve.com/java-io-char-buffered-filter/

http://www.cnblogs.com/lich/archive/2011/12/11/2284223.html

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67117.html

相關(guān)文章

  • Java IO學(xué)習(xí)筆記

    摘要:通常,所作的每個讀取請求都會導(dǎo)致對底層字符或字節(jié)流進行相應(yīng)的讀取請求。因此,建議用包裝所有其操作可能開銷很高的如和構(gòu)造函數(shù)創(chuàng)建一個使用默認大小輸入緩沖區(qū)的緩沖字符輸入流。 BufferedReader和BufferedWriter 這兩個類是高效率的提高文件的讀取速度,它們?yōu)樽址斎牒洼敵鎏峁┝艘粋€緩沖區(qū),可以顯著的調(diào)高寫入和讀取的速度,特別針對大量的磁盤文件讀取的時候,下面著重的講講...

    Vixb 評論0 收藏0
  • Java IO學(xué)習(xí)筆記總結(jié)

    摘要:學(xué)習(xí)筆記總結(jié)前言前面的八篇文章詳細的講述了的操作方法,文章列表如下基本的文件操作字符流和字節(jié)流的操作和操作內(nèi)存操作流管道流打印流對的支持和后續(xù)字節(jié)流字節(jié)流的操作都是基于和這兩個抽象類是字節(jié)輸入流,主要的功能是從文件中讀取數(shù)據(jù)它的子類有內(nèi)存操 Java IO學(xué)習(xí)筆記總結(jié) 前言 前面的八篇文章詳細的講述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字節(jié)流的操作 In...

    zhangke3016 評論0 收藏0
  • Java學(xué)習(xí)筆記()——數(shù)據(jù)校驗(Hibernate validation)

    摘要:在接口服務(wù)開發(fā)中,難免會校驗傳入方的參數(shù)校驗,尤其在請求時,驗證字符長度,字符類型是否滿足數(shù)據(jù)庫中字段的最大長度及類型,如果不符合條件應(yīng)及時攔截并返回,避免后續(xù)的流程。 showImg(https://segmentfault.com/img/remote/1460000018664784); 公司轉(zhuǎn)java開發(fā)也有一段時間了,在實際開發(fā)過程中還是會遇到一些問題的,本篇主要記錄下接口服...

    snowell 評論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強)

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進步歡迎點贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<