使用BufferedReader讀取TXT文件中數(shù)值,并輸出最大值
BufferedReader讀取TXT文件中數(shù)值輸出最大值
1.題目
txt文件中數(shù)字的讀取,并輸出最大值
輸出最大值92
2.BufferedReader 介紹
BufferedReader
是緩沖字符輸入流。它繼承于Reader。BufferedReader
的作用是為其他字符輸入流添加一些緩沖功能。
BufferedReader 函數(shù)列表:
BufferedReader(Reader in) BufferedReader(Reader in, int size) void close() void mark(int markLimit) boolean markSupported() int read() int read(char[] buffer, int offset, int length) String readLine() boolean ready() void reset() long skip(long charCount)
3.思路
- 打開文件
- 使用BufferedReader讀取
- readLine讀取每一行,保存到新個(gè) String 變量中
- 將String中的數(shù)字,轉(zhuǎn)換成數(shù)組
- 從數(shù)組中比較出最大值
4.問題
BufferedReader的readLine()方法是阻塞式的, 如果到達(dá)流末尾, 就返回null, 但如果client的socket末經(jīng)關(guān)閉就銷毀, 則會(huì)產(chǎn)生IO異常.,使用后要記得close
使用readLine依次讀取各行,處理后輸出,如果用以下方法,則會(huì)出現(xiàn)除第一行外行首字符丟失,原因就在于br.read() != -1 這判斷條件上。 因?yàn)樵趫?zhí)行這個(gè)條件的時(shí)候其實(shí)它已經(jīng)讀取了一個(gè)字符了,然而在這里并沒有對讀取出來的這個(gè)字符做處理,所以會(huì)出現(xiàn)少一個(gè)字符,如果你這里寫的是while(br.readLine()!=null)會(huì)出現(xiàn)隔一行少一行!
String str = null; br=new BufferedReader(new FileReader(fileName)); while(br.read()!=-1){ str = buf.readLine()); }
java.lang.NumberFormatException: For input string: " "這里的Integer.valueOf(s2[i]);參數(shù)里開頭和結(jié)尾不能含有空格
for(int i=0;i<s2.length;i++){ a[i]= Integer.valueOf(s2[i]); }
5.解決
直接上代碼了。。。。。
package test; import java.io.*; public class testtwo { public static void main(String[] args) throws IOException { try { //1.打開文件 FileReader fr=new FileReader("test.txt"); //2.使用BufferedReader讀取 BufferedReader br=new BufferedReader(fr); //保存數(shù)據(jù) String message = ""; String line = null; while((line = br.readLine()) != null) { message = message+" "+line; } //去掉兩端空格 message = message.trim(); //轉(zhuǎn)化成數(shù)組 String s2[]=message.split(" "); int a[]=new int[message.length()]; for(int i=0;i<s2.length;i++){ a[i]= Integer.valueOf(s2[i]); } //比較最大值 int max=a[0]; for(int j=1;j<a.length;j++){ if(max<a[j]){ max=a[j]; } } System.out.println("最大值為"+max); //4.關(guān)閉文件 br.close(); fr.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
6.小結(jié)一下
- 使用BufferedReader中readLine一行一行的讀取txt中數(shù)字
- 使用line將要丟失的一行,先保存起來,就不會(huì)丟失了
- String.trim()將數(shù)據(jù)兩端的空格給去掉了
使用BufferedReader讀取文件的好處
- 沒有緩沖區(qū)時(shí),每次讀取操作都會(huì)導(dǎo)致一次文件讀取操作(就是告訴操作系統(tǒng)內(nèi)核我要讀這個(gè)文件的這個(gè)部分,麻煩你幫我把它取過來)。
- 有緩沖區(qū)時(shí),會(huì)一次性讀取很多數(shù)據(jù),然后按要求分次交給上層調(diào)用者。
讀取塊大小通常是按最適合硬件的大小來讀的,因?yàn)閷τ谟布碚f,一次讀取一塊連續(xù)數(shù)據(jù)(比如 1K)和一次讀取一個(gè)字節(jié)需要的時(shí)間幾乎是一樣的(都是一次讀操作,只是最終提交的數(shù)據(jù)量有差異)。帶緩沖的 I/O 和不帶緩沖的相比效率差異是非常顯著的,你可以自行寫程序測試。
說到j(luò)ava reader緩存,其實(shí)有兩層緩存:
OS緩存,把磁盤數(shù)據(jù) 讀入內(nèi)存,通過read ahead, io scheduler等減少磁盤讀取次數(shù).
App緩存,做緩存/預(yù)讀,即BufferredReader的角色.
BufferredReader的作用:我的理解
1、減少System Call次數(shù)
2、減少磁盤讀取次數(shù)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java web開發(fā)之購物車功能實(shí)現(xiàn)示例代碼
這篇文章主要介紹了java web開發(fā)之購物車功能實(shí)現(xiàn)示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10Java使用Kaptcha實(shí)現(xiàn)簡單的驗(yàn)證碼生成器
這篇文章主要為大家詳細(xì)介紹了Java如何使用Kaptcha實(shí)現(xiàn)簡單的驗(yàn)證碼生成器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-02-02mvn compile報(bào)錯(cuò)“程序包c(diǎn)om.XXX不存在”
本文主要介紹了mvn compile報(bào)錯(cuò)“程序包c(diǎn)om.XXX不存在”,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01詳解Java如何在Array和List之間進(jìn)行轉(zhuǎn)換
這篇文章主要為大家介紹了詳解Java如何在Array和List之間進(jìn)行轉(zhuǎn)換的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Boot命令行運(yùn)行器的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10