BufferedReader读取TXT文件中数值,并输出最大值
1.题目
txt文件中数字的读取,并输出最大值
输出最大值92
2.BufferedReader 介绍
BufferedReader 是缓冲字符输入流。它继承于Reader。
BufferedReader 的作用是为其他字符输入流添加一些缓冲功能。
BufferedReader 函数列表:
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读取每一行,保存到新个 String 变量中
- 将String中的数字,转换成数组
- 从数组中比较出最大值
4.问题
- BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常.,使用后要记得close
- 使用readLine依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失,原因就在于br.read() != -1 这判断条件上。 因为在执行这个条件的时候其实它已经读取了一个字符了,然而在这里并没有对读取出来的这个字符做处理,所以会出现少一个字符,如果你这里写的是while(br.readLine()!=null)会出现隔一行少一行!
String str = null;
br=new BufferedReader(new FileReader(fileName));
while(br.read()!=-1){
str = buf.readLine());
}
3.java.lang.NumberFormatException: For input string: " "这里的Integer.valueOf(s2[i]);参数里开头和结尾不能含有空格
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);
//保存数据
String message = "";
String line = null;
while((line = br.readLine()) != null) {
message = message+" "+line;
}
//去掉两端空格
message = message.trim();
//转化成数组
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.关闭文件
br.close();
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
6.总结
- 使用BufferedReader中readLine一行一行的读取txt中数字
- 使用line将要丢失的一行,先保存起来,就不会丢失了
- String.trim()将数据两端的空格给去掉了