前段时间需要读报表打印,需求是可以从第N行读到第N行,发现百度出来的LineNumberReader方法都不怎么理想
然后就找到一篇和众百度里脱颖而出的好文章,所以分享之:
 
从类 的命名来看,貌似LineNumberReader可以支持从任意行读取的功能,并且提供了setLineNumber()的方法,但是这个按照并不能改变文件指针的位置,只是你调用getLineNumber()这个函数时,结果会变。API上面说它并不能改变文件物理的指针位置。看来以后得小心使用。
 

import java.io.File;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
 
public class Ex7 {
     public void dataReader(String nameFile, int start, int finish) {
          if (start > finish) {
               System.out.println("Error start or finish!");
               return;
          }
          InputStream inputStream = null;
          LineNumberReader reader = null;
          try {
               inputStream = new FileInputStream(new File(nameFile));
               reader = new LineNumberReader(
                         new InputStreamReader(inputStream));
               int lines = getTotalLines(new File(nameFile));
               if (start < 0 || finish < 0 || finish > lines || start > lines) {
                    System.out.println("Line not found!");
                    return;
               }
              
               String line = reader.readLine();
             lines = 0;
             while (line != null) {
                 lines++;
                 if(lines >= start && lines <= finish){
                      System.out.println(line);
                 }
                 line = reader.readLine();
             }
             inputStream.close();
               reader.close();
          } catch (FileNotFoundException e) {
               e.printStackTrace();
          } catch (IOException e) {
               System.err.println("IO Error");
               System.exit(0);
          }
 
     }
    
     private int getTotalLines(File file) throws IOException{
          FileReader in = new FileReader(file);
        LineNumberReader reader = new LineNumberReader(in);
        String line = reader.readLine();
        int lines = 0;
        while (line != null) {
            lines++;
            line = reader.readLine();
        }
        reader.close();
        in.close();
        return lines;
     }
 
     public static void main(String[] args) {
          new Ex7().dataReader("data.txt", 2, 4);
          new Ex7().dataReader("data.txt",3,8);
     }
}

java LineNumberReader的使用的更多相关文章

  1. Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、

    LineNumberReader 跟综行号的缓冲字符输入流,些类定义了setLineNumber(int)和getLineNumber(int),它们可分别用于设置和获取当前行号 import jav ...

  2. IO流02--毕向东JAVA基础教程视频学习笔记

    提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-rea ...

  3. Java IO(一)

       字节流的两个基类: InputStream OutputStream 字符流的两个基类: Reader Writer Writer 先学习一下字符流的特点. 既然IO流是用于操作数据的,那么数据 ...

  4. 黑马程序员_Java基础:IO流总结

    ------- android培训.java培训.期待与您交流! ---------- IO流在是java中非常重要,也是应用非常频繁的一种技术.初学者要是能把IO技术的学透,java基础也就能更加牢 ...

  5. IO流基础

    IO流,也称为数据流,用于处理设备之间的数据传输. JAVA对数据的操作就是通过流的方式,而流分为两种:字符流,字节流 字符流: 可以内部制定码表,处理文字很方便,字符流里的基类是Reader,Wri ...

  6. 黑马程序员_JavaIO流(二)

    字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应类: BufferedWriter BufferedReader 缓冲区要结合流才可以使用. 在流的基础上对流的功能进行了增强. Buffer ...

  7. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  8. Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例

    1. 自定义类模拟LineNumberReader的获取行号功能案例 2. 代码实现: (1)MyBufferedReader.java: package cn.itcast_08; import j ...

  9. Java基础知识强化之IO流笔记54:IO流练习之 LineNumberReader的特有的功能使用

    1. LineNumberReader的特有的功能:  BufferedReader |--LineNumberReader  public int getLineNumber():获得当前行号.   ...

随机推荐

  1. WPF 悬浮键盘

    原文:WPF 悬浮键盘 public class TouchScreenKeyboard : Window { #region Property & Variable & Constr ...

  2. LeapMotion Demo1

    原文:LeapMotion Demo1     LeapMotion SDK For c# 只提供了一个Sample.cs.   Leap Motion App Home 可以给初入手者提供很好的用户 ...

  3. HierarchicalDataTemplate

    针对具有分层数据结构的控件设计的,比如说TreeView,相当于可以每一个层级上做DataTemplate XmlDataProvider:数据源,写在Resources下 <XmlDataPr ...

  4. 使用Cubic Spline通过一组2D点绘制平滑曲线

    原文Draw a smooth curve through a set of 2D points with Cubic Spline I would like to provide you with ...

  5. C# WindowsPrincipal(Windows规则)的使用

    using System;using System.Collections.Generic;using System.Linq;using System.Security.Principal;usin ...

  6. window下golang生成静态库给C语言调用

    buidmod为c-archive能在window下生成 ,c-shared则不行 1.golang生成c-archive静态库 main.go package main import "C ...

  7. 简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录

    原文:简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录 在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID.当并发 ...

  8. 零元学Expression Blend 4 - Chapter 41 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(中)

    原文:零元学Expression Blend 4 - Chapter 41 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(中) 我们接着进行动画MenuBar的制作 接续着上 ...

  9. 快速搭建多线程Windows服务解决方案

    一.引言 在软件开发过程中windows服务有的时候非常有用,用于同步数据,发送邮件,宿主WF引擎服务等,但是快速搭建一个好用多线程进行多任务处理的程序往往是一个项目必须考虑的问题.自己在项目中也经常 ...

  10. VM中linux和windows主机进行串口通信

    最近在做关于AIS的内容.为了对AIS电文进行解码,串口收发. 数据有PC机模拟发送,为了调试方便,不用次次将程序放到开发板上运行,所以利用pc主机和虚拟机进行串口通信模拟该过程. 首先需要用到一个软 ...