黑马程序员技术交流社区

标题: LineNumberReader [打印本页]

作者: 李健09    时间: 2013-9-10 17:27
标题: LineNumberReader
本帖最后由 李健09 于 2013-9-11 21:06 编辑
  1. <p><p>package com.IO;
  2. import java.io.*;
  3. public class LineNumberReaderDemo
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 FileReader fr=new FileReader("F:\\java\\Workspaces\\eclipse_English\\day19\\sinian.txt");</p><p>                //FileReader fr=new FileReader("F:\\java\\Workspaces\\eclipse_English\\day19\\src\\com\\IO\\zhuangshihejicheng.java");
  8.                 //此处改为.java文件又为什么没有最后一行空白行呢?
  9.                 LineNumberReader linr=new LineNumberReader(fr);
  10.                 String line=null;
  11.                 linr.setLineNumber(100);
  12.                 while((line=linr.readLine())!=null)
  13.                 {
  14.                         sop(linr.getLineNumber()+":"+line);
  15.                 }
  16.                 linr.close();
  17.         }
  18.         public static void sop(Object obj)
  19.         {
  20.                 System.out.println(obj);
  21.         }
  22. }</p></p>
复制代码
我的文本文件一共有6行但是读取之后会有一行空白行出来,也就是会多出来一个107行的空白行,我想把这个空白行去掉怎么做,我根据老师课件自己写了一个但是输出的不对输出的只有2,4,6这三行代码如下
  1. package com.IO;
  2. import java.io.*;
  3. class LineNumReader extends Reader
  4. {
  5. private Reader r;
  6. LineNumReader(Reader r)
  7. {
  8.   this.r =r;
  9. }
  10. public String ReadLine() throws IOException
  11. {
  12.   StringBuilder sb=new StringBuilder();
  13.   int ch=0;
  14.   while((ch=r.read())!=-1)
  15.   {
  16.    if(ch=='\r')
  17.     continue;
  18.    if(ch=='\n')
  19.     return sb.toString();
  20.    else
  21.     sb.append((char)ch);
  22.   }
  23.   if(sb.length()!=0)
  24.    return sb.toString();
  25.   return null;
  26. }
  27. public int read(char[] cbuf, int off, int len) throws IOException
  28. {
  29.   return r.read(cbuf, off, len);
  30. }
  31. public void close() throws IOException
  32. {
  33.   r.close();
  34. }
  35. public void myClose() throws IOException
  36. {
  37.   r.close();
  38. }
  39. }
  40. public class LineNumberReaderDemo2
  41. {
  42. public static void main(String[] args) throws IOException
  43. {
  44.   FileReader fr=new FileReader("F:\\java\\Workspaces\\eclipse_English\\day19\\sinian.txt");
  45.   LineNumberReader linr=new LineNumberReader(fr);
  46.   LineNumReader linrr=new LineNumReader(linr);
  47.   String line=null;
  48.   String liner=null;
  49.   linr.setLineNumber(100);
  50.   while((line=linr.readLine())!=null&&(liner=linrr.ReadLine())!=null)
  51.   {
  52.    sop(linr.getLineNumber()+":"+line);
  53.   }
  54.   linr.close();
  55.   linrr.close();
  56. }
  57. public static void sop(Object obj)
  58. {
  59.   System.out.println(obj);
  60. }
  61. }

  62.   

  63.          
复制代码

作者: 潘才新    时间: 2013-9-10 17:56
{:soso__8379753311539340974_4:}
作者: 多多    时间: 2013-9-10 22:26
  1. package com.IO;

  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. import java.io.LineNumberReader;

  5. public class LineNumberReaderDemo2 {
  6.         public static void main(String[] args) throws IOException {
  7.                 FileReader fr = new FileReader("e:\\88java\\test.txt");
  8.                 LineNumberReader linr = new LineNumberReader(fr);
  9.                 // LineNumReader linrr = new LineNumReader(linr);
  10.                 String line = null;
  11.                 String liner = null;
  12.                 linr.setLineNumber(100);
  13.                 while ((line = linr.readLine()) != null) {
  14.                         sop(linr.getLineNumber() + ":" + line);
  15.                 }
  16.                 linr.close();
  17.         //        linrr.close();
  18.         }

  19.         public static void sop(Object obj) {
  20.                 System.out.println(obj);
  21.         }
  22. }
  23. package com.IO;

  24. import java.io.*;

  25. class LineNumReader extends Reader {
  26.         private Reader r;

  27.         LineNumReader(Reader r) {
  28.                 this.r = r;
  29.         }

  30.         public String ReadLine() throws IOException {
  31.                 StringBuilder sb = new StringBuilder();
  32.                 int ch = 0;
  33.                 while ((ch = r.read()) != -1) {
  34.                         if (ch == '\r')
  35.                                 continue;
  36.                         if (ch == '\n')
  37.                                 return sb.toString();
  38.                         else
  39.                                 sb.append((char) ch);
  40.                 }
  41.                 if (sb.length() != 0)
  42.                         return sb.toString();
  43.                 return null;
  44.         }

  45.         public int read(char[] cbuf, int off, int len) throws IOException {
  46.                 return r.read(cbuf, off, len);
  47.         }

  48.         public void close() throws IOException {
  49.                 r.close();
  50.         }

  51.         public void myClose() throws IOException {
  52.                 r.close();
  53.         }
  54. }

复制代码

作者: 多多    时间: 2013-9-10 22:27
我只保留了带行号的读,这样写就没问题了,
作者: 李健09    时间: 2013-9-11 21:05
多多 发表于 2013-9-10 22:27
我只保留了带行号的读,这样写就没问题了,

{:soso_e183:}谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2