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

 更新时间:2021年12月09日 16:43:45   作者:热情的rhew  
这篇文章主要介绍了使用BufferedReader读取TXT文件中数值,并输出最大值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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()); 
}

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

使用BufferedReader读取文件的好处

  • 没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。
  • 有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。

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

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

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

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

BufferredReader的作用:我的理解

1、减少System Call次数

2、减少磁盘读取次数

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java使用@Retryable注解实现HTTP请求重试

    Java使用@Retryable注解实现HTTP请求重试

    HTTP调用是Java应用与外部API进行交互时重要的访问方式之一,为了确保在遇到临时性问题时能自动重试,我们可以设计一个灵活的重试机制,在Java中,我们可以通过注解来实现这一功能,文将介绍如何使用注解@Retryable来实现HTTP调用的重试机制,需要的朋友可以参考下
    2024-10-10
  • SpringBoot this调用@Bean效果详解

    SpringBoot this调用@Bean效果详解

    这篇文章主要介绍了在一个@Bean方法内,this调用同一个类的@Bean方法会有什么效果,我们可以通过bean的名称、bean的类型或者bean的名称+类型来获取容器中的bean
    2023-02-02
  • Java实现Map遍历key-value的四种方法

    Java实现Map遍历key-value的四种方法

    本文主要介绍了Java实现Map遍历key-value的四种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Netty中最简单的粘包解析方法分享

    Netty中最简单的粘包解析方法分享

    黏包 是指网络上有多条数据发送给服务端, 但是由于某种原因这些数据在被接受的时候进行了重新组合,本文分享了一种最简单的黏包解析方法, 非常适用于初初初级选手
    2023-05-05
  • Java使用线程池批量处理数据操作具体流程

    Java使用线程池批量处理数据操作具体流程

    这篇文章主要给大家介绍了关于Java使用线程池批量处理数据操作的相关资料,Java多线程编程中线程池是一个非常重要的概念,线程池可以提高线程的复用率和任务调度的效率,尤其是当需要查询大批量数据时,需要的朋友可以参考下
    2023-06-06
  • java拷贝指定目录下所有内容到minIO代码实例

    java拷贝指定目录下所有内容到minIO代码实例

    这篇文章主要介绍了java拷贝指定目录下所有内容到minIO代码实例,创建桶 直接使用工具类先判断,再创建即可,创建文件夹,需要注意以"/"结尾,实际也是在minIO上创建文件,只是作为目录的表现形式展示,需要的朋友可以参考下
    2024-01-01
  • 带你了解10道java入门面试题

    带你了解10道java入门面试题

    面试题相信大家都不陌生,想要一个好的工作面试题必不可少的,下面和小编一起来学习与了解Java当中有有些什么面试题吧,希望能给你带来帮助
    2021-08-08
  • Spring Cloud Gateway全局异常处理的方法详解

    Spring Cloud Gateway全局异常处理的方法详解

    这篇文章主要给大家介绍了关于Spring Cloud Gateway全局异常处理的相关资料,需要的朋友可以参考下
    2018-10-10
  • SpringBoot 实现CAS Server统一登录认证的详细步骤

    SpringBoot 实现CAS Server统一登录认证的详细步骤

    ​ CAS(Central Authentication Service)中心授权服务,是一个开源项目,目的在于为Web应用系统提供一种可靠的单点登录,这篇文章主要介绍了SpringBoot 实现CAS Server统一登录认证,需要的朋友可以参考下
    2024-02-02
  • Spring中的@ConditionalOnProperty作用和用法详解

    Spring中的@ConditionalOnProperty作用和用法详解

    这篇文章主要介绍了Spring中的@ConditionalOnProperty作用和用法详解,在spring boot中有时候需要控制配置类是否生效,可以使用@ConditionalOnProperty注解来控制@Configuration是否生效,需要的朋友可以参考下
    2023-11-11

最新评论