摘要:通常,所作的每個讀取請求都會導致對底層字符或字節流進行相應的讀取請求。因此,建議用包裝所有其操作可能開銷很高的如和構造函數創建一個使用默認大小輸入緩沖區的緩沖字符輸入流。
BufferedReader和BufferedWriter
BufferedReader這兩個類是高效率的提高文件的讀取速度,它們為字符輸入和輸出提供了一個緩沖區,可以顯著的調高寫入和讀取的速度,特別針對大量的磁盤文件讀取的時候,下面著重的講講這兩個類
構造函數從字符輸入流中讀取文本,緩沖各個字符,從而實現字符、數組和行的高效讀取,要特別注意的是這個市針對字符流而不是字節流。
通常,Reader 所作的每個讀取請求都會導致對底層字符或字節流進行相應的讀取請求。因此,建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader 和 InputStreamReader)
實例BufferedReader(Reader in) 創建一個使用默認大小輸入緩沖區的緩沖字符輸入流。
BufferedReader(Reader in, int sz) 創建一個使用指定大小輸入緩沖區的緩沖字符輸入流。
可以看出構造函數使用了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() 讀取一行的數據
int read() 讀取一個字符,注意這里的和字節的不一樣,這里的漢字占用了一個字節,前面講到讀取字節流的時候使用byte讀取漢字占用三個字節
skip(int n) 跳過n個字節
ready() 判斷此流是否已準備好被讀取。
用于控制臺的讀取,前面已經說過System.in返回的是InputStream類型的,因此可以使用InputStreamReader實例化,當然這個有點多余了,我們完全可以使用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); //跳過兩個字節 // // 第一種讀取的方式 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); //強制轉化成字符 len=bufferedReader.read(); }BufferedWriter
將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數組和字符串的高效寫入。
通常 Writer 將其輸出立即發送到底層字符或字節流。除非要求提示輸出,否則建議用 BufferedWriter 包裝所有其 write() 操作可能開銷很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));構造函數
BufferedWriter(Writer out) 創建一個使用默認大小輸出緩沖區的緩沖字符輸出流。
BufferedWriter(Writer out, int sz) 創建一個使用給定大小輸出緩沖區的新緩沖字符輸出流。
File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt"); BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file));
常用函數注意這里的FileWriter是Writer的子類,因此可以使用其實例化
實例close()
flush()
newLine() 寫入一個與平臺相關的換行符
write(int data) 寫入一個字符,這里的寫入的不是整數
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("文件夾創建成功"); } BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file)); String str="陳加兵"; int data=48; String name="chenjiabing"; char[] chars=name.toCharArray(); bufferedWriter.write(str); //寫入一個字符串,當然也可以截取這個字符串的某一段 bufferedWriter.newLine(); //寫入一個平臺自帶的換行符,因為每一個操作系統的換行符都不一樣 bufferedWriter.write(data); //寫入的并不是整數,而是這個整數所代表的字符 bufferedWriter.newLine(); bufferedWriter.write(chars,1,4); //寫入字符數組 bufferedWriter.flush(); bufferedWriter.close()
拓展:通過了上面的學習,你不覺得使用這個類寫入文件數據有點煩了,只能寫入String char類型的數據,此時我們就想到了前面說過的打印流(PrintWriter),這是一個便捷的寫入文件的類,可以指定任意格式任意類型的數據,同樣是輸出流,我么可以將他們結合起來,構成一個更加強大的輸出流,如下:
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();綜合實例
將一個文件中數據轉移到另外一個文件中
package IO; import java.io.*; /** * Created by chenjiabing on 17-5-26. */ public class demo13 { /** * 常用函數: * 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中的一行數據 bufferedWriter.write(str); //將這一行數據寫入文件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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67175.html
摘要:通常,所作的每個讀取請求都會導致對底層字符或字節流進行相應的讀取請求。因此,建議用包裝所有其操作可能開銷很高的如和構造函數創建一個使用默認大小輸入緩沖區的緩沖字符輸入流。 BufferedReader和BufferedWriter 這兩個類是高效率的提高文件的讀取速度,它們為字符輸入和輸出提供了一個緩沖區,可以顯著的調高寫入和讀取的速度,特別針對大量的磁盤文件讀取的時候,下面著重的講講...
摘要:學習筆記總結前言前面的八篇文章詳細的講述了的操作方法,文章列表如下基本的文件操作字符流和字節流的操作和操作內存操作流管道流打印流對的支持和后續字節流字節流的操作都是基于和這兩個抽象類是字節輸入流,主要的功能是從文件中讀取數據它的子類有內存操 Java IO學習筆記總結 前言 前面的八篇文章詳細的講述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字節流的操作 In...
摘要:在接口服務開發中,難免會校驗傳入方的參數校驗,尤其在請求時,驗證字符長度,字符類型是否滿足數據庫中字段的最大長度及類型,如果不符合條件應及時攔截并返回,避免后續的流程。 showImg(https://segmentfault.com/img/remote/1460000018664784); 公司轉java開發也有一段時間了,在實際開發過程中還是會遇到一些問題的,本篇主要記錄下接口服...
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
閱讀 3455·2023-04-26 02:31
閱讀 3621·2021-11-23 09:51
閱讀 1286·2021-11-17 09:33
閱讀 2436·2021-11-16 11:45
閱讀 2566·2021-10-11 11:12
閱讀 2406·2021-09-22 15:22
閱讀 2712·2021-09-04 16:40
閱讀 2569·2021-07-30 15:30