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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-4-2 20:43  /  985 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. class  Demo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 FileReader fr = new FileReader("ZhuanHuan.java");
  7.                 LineNumberReader lin = new LineNumberReader(fr);
  8.                 char[] arr = new char[1024];
  9.                 while(true)
  10.                 {
  11.                         int s= lin.read(arr);
  12.                         if(s==-1)
  13.                                 break;
  14.                         else
  15.                                 System.out.print(lin.getLineNumber()+";;"+new String(arr,0,s));//为什么带着行号打印却没有行号呢?为什么啊
  16.                
  17.                 }
  18.                 lin.close();
  19.         }
  20. }
复制代码

谢谢

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

4 个回复

倒序浏览
你的方法是全部都读到你的char缓冲区了,还怎么打印行号?
你的一行一行的读:
FileReader fr = new FileReader("Road.java");
             LineNumberReader lin = new LineNumberReader(fr);
             char[] arr = new char[1024];
//             while(true)
//             {
//                     int s= lin.read(arr);
//                     if(s==-1)
//                             break;
//                     else
//                             System.out.print(lin.getLineNumber()+";;"+new String(arr,0,s));//为什么带着行号打印却没有行号呢?为什么啊
//            
//             }
             String line = null;

             while ((line = lin.readLine()) != null) {

             System.out.println("Line " + lin.getLineNumber() +": " + line);
             }
             lin.close();

这样就行了!

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 papercup 于 2014-4-2 21:42 编辑

给你改了一下:
  1. import java.io.*;
  2. class  Hanghao
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 FileReader fr = new FileReader("e:\\MainDemo.java");
  7.                 LineNumberReader lin = new LineNumberReader(fr);
  8.                 char[] arr = new char[1024];
  9.                 while(true)
  10.                 {
  11.                         String  s= lin.readLine();    //这里改为一次读一行。
  12.                         if(s==null)
  13.                                 break;
  14.                         else
  15.                                 System.out.println(lin.getLineNumber()+" "+s)   //读完一行后打印出来。
  16.                
  17.                 }
  18.                 lin.close();
  19.         }
  20. }
复制代码
回复 使用道具 举报
System.out.print(lin.getLineNumber()+";;"+new String(arr,0,s));//为什么带着行号打印却没有行号呢?为什么啊
你是想通过这句话打印出行号和一行语句,但是上面的代码int s= lin.read(arr); 是将数据读取到数组,new String(arr,0,s)是将整个数组中从角标0到s的数据转换成字符串,所以没有行号。
因为LineNumberReader 是BufferedReader的子类,可以用LineNumberReader 的readLine()方法获取一行加上行号
修改代码如下:
  1. import java.io.*;
  2. class  Demo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 FileReader fr = new FileReader("Test.java");
  7.                 LineNumberReader lin = new LineNumberReader(fr);
  8.               
  9.                 while(true)
  10.                 {
  11.                        String  s= lin.readLine();//用readLine()方法读取一行
  12.                         if(s==null)
  13.                                 break;
  14.                         else
  15.                                 System.out.println(lin.getLineNumber()+";;"+s);//为什么带着行号打印却没有行号呢?为什么啊
  16.                
  17.                 }
  18.                 lin.close();
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
getLineNumber()获取当前行号,你的程序好像没有readLine,而是读到字节数组了,你的代码看上去也不到1kb,所以你的缓冲区没有用完,getLineNumber返回的应该是倒数第二行的行号。你试一下是不是。
带行号的下面是我写的
import java.io.*;
public class  Demo
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr = new FileReader("swap.java");
                LineNumberReader lin = new LineNumberReader(fr);
                String str = null;
                while(lin.readLine()!= null)
                {
                        str=lin.readLine();
                        System.out.println(lin.getLineNumber()+str);//为什么带着行号打印却没有行号呢?为什么啊
                }
                lin.close();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马