使用BufferedReader读取TXT文件中数值,并输出最大值

网友投稿 605 2022-11-16

使用BufferedReader读取TXT文件中数值,并输出最大值

使用BufferedReader读取TXT文件中数值,并输出最大值

目录BufferedReader读取TXT文件中数值输出最大值1.题目2.BufferedReader 介绍3.思路4.问题5.解决6.小结一下使用BufferedReader读取文件的好处

BufferedRhttp://eader读取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());

}

java.lang.NumberFormatException: For input string: " "这里的Integer.valueOf(s2[i]);参数里开头和结尾不能含有空格

for(int i=0;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

a[i]= Integer.valueOf(s2[i]);

}

//比较最大值

int max=a[0];

for(int j=1;j

if(max

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()将数据两端的空格给去掉了

使用BufferedReader读取文XEbTp件的好处

没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。

有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。

读取块大小通常是按最适合硬件的大小来读的,因为对于硬件来说,一次读取一块连续数据(比如 1K)和一次读取一个字节需要的时间几乎是一样的(都是一次读操作,只是最终提交的数据量有差异)。带缓冲的 I/O 和不带缓冲的相比效率差异是非常显著的,你可以自行写程序测试。

说到java reader缓存,其实有两层缓存:

OS缓存,把磁盘数据 读入内存,通过read ahead, io scheduler等减少磁盘读取次数.

App缓存,做缓存/预读,即BufferredReader的角色.

BufferredReader的作用:我的理解

1、减少System Call次数

2、减少磁盘读取次数

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

a[i]= Integer.valueOf(s2[i]);

}

//比较最大值

int max=a[0];

for(int j=1;j

if(max

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()将数据两端的空格给去掉了

使用BufferedReader读取文XEbTp件的好处

没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。

有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。

读取块大小通常是按最适合硬件的大小来读的,因为对于硬件来说,一次读取一块连续数据(比如 1K)和一次读取一个字节需要的时间几乎是一样的(都是一次读操作,只是最终提交的数据量有差异)。带缓冲的 I/O 和不带缓冲的相比效率差异是非常显著的,你可以自行写程序测试。

说到java reader缓存,其实有两层缓存:

OS缓存,把磁盘数据 读入内存,通过read ahead, io scheduler等减少磁盘读取次数.

App缓存,做缓存/预读,即BufferredReader的角色.

BufferredReader的作用:我的理解

1、减少System Call次数

2、减少磁盘读取次数

a[i]= Integer.valueOf(s2[i]);

}

//比较最大值

int max=a[0];

for(int j=1;j

if(max

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()将数据两端的空格给去掉了

使用BufferedReader读取文XEbTp件的好处

没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。

有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。

读取块大小通常是按最适合硬件的大小来读的,因为对于硬件来说,一次读取一块连续数据(比如 1K)和一次读取一个字节需要的时间几乎是一样的(都是一次读操作,只是最终提交的数据量有差异)。带缓冲的 I/O 和不带缓冲的相比效率差异是非常显著的,你可以自行写程序测试。

说到java reader缓存,其实有两层缓存:

OS缓存,把磁盘数据 读入内存,通过read ahead, io scheduler等减少磁盘读取次数.

App缓存,做缓存/预读,即BufferredReader的角色.

BufferredReader的作用:我的理解

1、减少System Call次数

2、减少磁盘读取次数

if(max

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()将数据两端的空格给去掉了

使用BufferedReader读取文XEbTp件的好处

没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。

有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。

读取块大小通常是按最适合硬件的大小来读的,因为对于硬件来说,一次读取一块连续数据(比如 1K)和一次读取一个字节需要的时间几乎是一样的(都是一次读操作,只是最终提交的数据量有差异)。带缓冲的 I/O 和不带缓冲的相比效率差异是非常显著的,你可以自行写程序测试。

说到java reader缓存,其实有两层缓存:

OS缓存,把磁盘数据 读入内存,通过read ahead, io scheduler等减少磁盘读取次数.

App缓存,做缓存/预读,即BufferredReader的角色.

BufferredReader的作用:我的理解

1、减少System Call次数

2、减少磁盘读取次数

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()将数据两端的空格给去掉了

使用BufferedReader读取文XEbTp件的好处

没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。

有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。

读取块大小通常是按最适合硬件的大小来读的,因为对于硬件来说,一次读取一块连续数据(比如 1K)和一次读取一个字节需要的时间几乎是一样的(都是一次读操作,只是最终提交的数据量有差异)。带缓冲的 I/O 和不带缓冲的相比效率差异是非常显著的,你可以自行写程序测试。

说到java reader缓存,其实有两层缓存:

OS缓存,把磁盘数据 读入内存,通过read ahead, io scheduler等减少磁盘读取次数.

App缓存,做缓存/预读,即BufferredReader的角色.

BufferredReader的作用:我的理解

1、减少System Call次数

2、减少磁盘读取次数

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【夯实Redis】如何保证数据库与缓存双写一致性?        跟着大宇学Redis--------目录帖
下一篇:Redis常见挑战汇总        跟着大宇学Redis--------目录帖
相关文章

 发表评论

暂时没有评论,来抢沙发吧~