A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李大伟 高级黑马   /  2013-4-12 09:57  /  1655 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李大伟 于 2013-4-12 17:09 编辑

假如有一个文本,行数大于10,我想由下向上读取10行,也就是说读取最后10行,我觉得最好给这个文本加上行号,这个代码应该怎么写,

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

8 个回复

倒序浏览
API中有这样的类

QQ截图20130412102029.png (26.49 KB, 下载次数: 3)

QQ截图20130412102029.png
回复 使用道具 举报
自己实现了一下,我的思路是利用集合转存,然后根据size()方法获得倒数10行的内容。
代码如下:
  1. import java.util.*;
  2. import java.io.*;
  3. class BTDemo
  4. {
  5.         public static void main(String []args) throws Exception{
  6.                 BufferedReader br = new BufferedReader(new FileReader("1.txt"));
  7.                 //创建一个集合,转存用
  8.                 ArrayList<String> al = new ArrayList<String>();
  9.                 //创建缓冲区
  10.                 String line = null;
  11.                 //读取数据
  12.                 while((line = br.readLine())!=null){
  13.                         al.add(line);
  14.                 }
  15.                 BufferedWriter bw = new BufferedWriter(new FileWriter("2.txt"));
  16.                 //循环写入,利用集合转存,al.size()-10用来获取倒数第10行行号,然后获取写入另一个txt。
  17.                 int num = 1;//你要的行号
  18.                 for(int i=al.size()-10;i<al.size()-1;i++){
  19.                         //获取集合里的数据
  20.                         String str = al.get(i).toString();
  21.                         //打印控制台,检察用
  22.                         System.out.println(str);
  23.                         bw.write(num+"------"+str);
  24.                         //行号自增
  25.                         num++;
  26.                         //记得换行
  27.                         bw.newLine();
  28.                         //记得刷新
  29.                         bw.flush();
  30.                 }
  31.                 bw.close();
  32.                 br.close();
  33.         }
  34. }
复制代码
自己运行可以了才发的,你试试。同样新手上路,打好基础进黑马。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
利用集合保存文件内容,再对集合进行读取!希望对你有用!
  1. import java.io.*;
  2. import java.util.*;

  3. public class fileReader {

  4.     public static void main(String[] args)throws Exception {
  5.       
  6.         String str;
  7.         List<String> list= new ArrayList<String>();//利用集合保存文件读取到得内容
  8.         InputStreamReader isr = new InputStreamReader(new FileInputStream("d:/a.txt"), "gb2312");//解决汉字乱码问题
  9.         BufferedReader bre=new BufferedReader(isr);
  10.         while((str=bre.readLine())!=null)
  11.         {
  12.          list.add(str);
  13.         }
  14.         isr.close();
  15.         bre.close();
  16.         if(list.size()>=10) //如果文件大于10行 则从文件总行数-10处输出,也就是倒数第十行开始。
  17.         {   System.out.println("文件内容总共有"+list.size()+"行! 到数10行内容如下:\n");
  18.             for(int i=list.size()-10;i<list.size();i++)
  19.             System.out.println("第"+(i-1)+"行内容:"+list.get(i));
  20.         }
  21.             else
  22.             {     System.out.println("文件内容只有"+list.size()+"行! 文件内容如下:\n");
  23.             for(int i=0;i<list.size();i++)
  24.             System.out.println("第"+(i+1)+"行内容:"+list.get(i));
  25.             }
  26.     }
  27. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
OpenFileDialog Open = new OpenFileDialog();
            Open.Filter="文本文档|.txt|";
            if (Open.ShowDialog() != true)
            {
                return;
            }
            string Fname = Open.FileName;
            string  Line = File.ReadLines(Fname, Encoding.Default).ToString();
            for (int i = (Line.Count() - 10); i < Line.Count(); i++)//不知道这样你看行不! 从Line总行数开始计算 然后小于他的总行数!当然条件是你的表里面很多行数据!
  代码我就写到这里 下面我就不写了 理解是最重要的!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
梁航斌 发表于 2013-4-12 10:37
自己实现了一下,我的思路是利用集合转存,然后根据size()方法获得倒数10行的内容。
代码如下:自己运行 ...

哥们 你这个我试了一下,感觉差不多,但是数好像不准啊
回复 使用道具 举报
李大伟 发表于 2013-4-12 13:42
哥们 你这个我试了一下,感觉差不多,但是数好像不准啊

什么数?发我试试,你是说行数那个?
回复 使用道具 举报
本帖最后由 梁航斌 于 2013-4-12 14:08 编辑
梁航斌 发表于 2013-4-12 13:50
什么数?发我试试,你是说行数那个?

不知道你的意思呢,我又修改了一下代码,之前理解你的意思是打印输出后的行号。结果你说不行,然后我又想,是不是你想要他原来的行号呢,于是给出下列代码
  1. import java.util.*;
  2. import java.io.*;
  3. class BTDemo
  4. {
  5.         public static void main(String []args) throws Exception{
  6.                 LineNumberReader br = new LineNumberReader(new FileReader("1.txt"));
  7.                 //创建一个集合,转存用
  8.                 ArrayList<String> al = new ArrayList<String>();
  9.                 //创建缓冲区
  10.                 String line = null;
  11.                 //读取数据
  12.                 while((line = br.readLine())!=null){
  13.                         al.add(br.getLineNumber()+line);
  14.                 }
  15.                 BufferedWriter bw = new BufferedWriter(new FileWriter("2.txt"));
  16.                 //循环写入,利用集合转存,al.size()-10用来获取倒数第10行行号,然后获取写入另一个txt。
  17.                 //发现了,这里有点问题,条件应该是i<al.size();我说怎么少了一行,原来减一了- -b。
  18.                 for(int i=al.size()-10;i<al.size();i++){
  19.                         //获取集合里的数据
  20.                         String str = al.get(i).toString();
  21.                         //打印控制台,检察用
  22.                         System.out.println(str);
  23.                         bw.write(str);
  24.                         //记得换行
  25.                         bw.newLine();
  26.                         //记得刷新
  27.                         bw.flush();
  28.                 }
  29.                 bw.close();
  30.                 br.close();
  31.         }
  32. }
复制代码
运行了,这下是10行了。同样是新手,加油啊
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-12 16:55:48
9#
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马