62,614
社区成员
发帖
与我相关
我的任务
分享
import java.io.*;
import java.util.*;
public class Exercise1 {
public static void main(String[] args)
{
try
{
BufferedReader in=new BufferedReader(new FileReader("data1.txt"));
String s=new String();
String s1=new String();
Vector test=new Vector();
int size=0;
while((s=in.readLine())!=null)
test.addElement(s);
//-----------------------
/*size=test.size();
for(int i=size-1;i>=0;i--)
System.out.println(test.elementAt(i));*/
//------------------------------------------------------
size=test.size();
for(int i=0;i<size;i++)
s1=s1+(String)test.elementAt(i)+"\n";
LineNumberReader li=new LineNumberReader(new StringReader(s1));
BufferedReader in1=new BufferedReader(li);
//PrintWriter out1=new PrintWriter(new BufferedWriter(new FileWriter("data3.txt")));
while((s=in1.readLine())!=null)
System.out.println("Line"+li.getLineNumber()+": "+s);
in1.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
String text = "a\r\nb\r\nc\r\n";
LineNumberReader r = new LineNumberReader(new BufferedReader(new StringReader(text)));
String tmp = null;
while ((tmp = r.readLine()) != null)
System.out.println("Line" + r.getLineNumber() + ": " + tmp);
r.close();
lz应该用LineNumberReader 来包装BufferedReader而不是反过来。
BufferedReader 的缓冲区默认是8192 lz的文本内容应该还没这么多,用BufferedReader包装LineNumberReader 的话直接就给缓冲完了,所以行号一直是5。while((s=in1.readLine())!=null) {
System.out.println("Line "+li.getLineNumber()+": "+s);
}
in1.readLine() 时,in1需要按照一行一行来输出自己的内容,但输出之前in1必须将li的内容全部读完,所以li的lineNumber就到了第5行了。