java如何实现从指定位置读取文件到指定位置结束?

java如何实现从指定位置读取文件到指定位置结束?

你大概想象的是有这么一个文件流对象,在使用它的时候可以给它设置一个起始位置和结束位置,然后开始一行一行读出来,用几行代码就能搞定。我在网上查了好多资料,都没有找到期望的对象,于是我就先断定java中是不存在这么一个对象的。

但是这并不代表不能完成一个这样的操作。

我所遇到的业务是这样的:在某个页面上点击某个按钮,需要能够看到这台服务器的运行日志。

于是就需要将服务器的日志文件读出然后返回给页面,让人看。

在考虑到页面的缓存限制和赋值困难,一个几十上百兆的文件内容一次全返回到页面会导致长达几十秒的卡顿和页面的崩溃,于是只能一次传一点,像分页一样把整个日志文件内容传完。

上代码:

public static void main(String[] args) {
    //用来存一行文件内容的对象
    String line = null;
    //用来存很多行文件内容的对象
    StringBuilder text = new StringBuilder();
    //用来计数
    int tmpCount =0;
    //开始行
    int begin=50;
    //结束行
    int end=100;
    //创建一个缓冲流对象,后面的a/a.log是文件的路径
    try(BufferedReader sb = new BufferedReader(new FileReader("a/a.log"))){
        //这里使用sb.readLine()将一行文件的内容赋予line,注意:在出现sb.readLine()的时候不管你是用来做判断还是赋值,这行内容都已经从流消失。
        while ((line = sb.readLine()) != null){
            //++=+1 
            tmpCount++;
            //如果行数大于等于开始行并且小于等于结束行
            if (tmpCount>=begin && tmpCount<=end){
                //用词对象将这行的内容存起来,并加上换行符
                text.append(line).append("\n");
            }
        }
        //关闭流
        sb.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //使用
    Map map = new HashMap();
    map.put("text",text);
}

好了到这里就完成了从指定位置读取文件到指定位置结束。

如果你知道有什么java内置对象可以完成以上操作,还请告诉我。

你可能感兴趣的:(java如何实现从指定位置读取文件到指定位置结束?)