我有以下方法来读取文件并以相反的顺序输出它的行:
public void Reverse(BufferedReader br, PrintWriter pw)
{
try
{
String headLine = br.readLine();
if (headLine != null)
{
Reverse(br, pw);
pw.println(br.readLine());
}//if
pw.println(headLine);
}//try
}//Reverse
出于某种原因,我在代码运行时没有在输出文件中看到任何内容它正在编译正确。有什么想法吗?
答案 0 :(得分:4)
首先,你的代码甚至不会编译 - 你有一个没有catch或finally块的try块。当我们看不到您的真实代码时,确切地知道发生了什么事情比平常更难。
其次,你没有明显的原因两次调用readLine()
,然后写出headLine
,即使它是空的。你的代码真的不应该是:
if (headLine != null)
{
Reverse(br, pw);
pw.println(headLine);
}
之后没有额外的println
?
我的猜测是你永远不会刷新或关闭PrintWriter
,而且你已经关闭了自动刷新功能。不要那样做。或者某个地方可能存在异常,PrintWriter
不会报告,因为它会吞下它们。我个人建议只使用Writer
或BufferedWriter
而不是PrintWriter
,并声明Reverse
可以投掷IOException
。然后确保调用代码在finally块中关闭writer。
我还建议不使用递归,除非你只是使用它作为调查递归的方法。将整个文件读入字符串列表,将其反转,然后将其全部写出来会更加精明。
答案 1 :(得分:0)
试试这段代码:
public void Reverse(String headLine, BufferedReader br, PrintWriter pw) throws IOException
{
try
{
headLine = br.readLine();
if (headLine != null)
{
Reverse(headLine, br, pw);
pw.println(headLine);
}//if
//pw.println(headLine);
}finally {
}
}
这里,最初将标题发送为“”
答案 2 :(得分:0)
您的原始代码尝试在已经读取所有行之后写入新读取的行。
您需要的是在再次致电headline
之后写下Reverse
值,如下所示:
public void Reverse(BufferedReader br, PrintWriter pw) throws IOException
{
String headLine = br.readLine();
if (headLine != null)
{
Reverse(br, pw);
pw.println(headLine);
}
}