0

我有以下方法来读取文件并以相反的顺序输出其行:

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

出于某种原因,运行代码时我在输出文件中看不到任何内容,但它正在正确编译。有任何想法吗?

4

3 回答 3

4

首先,您的代码甚至无法编译——您有一个没有 catch 或 finally 块的 try 块。当我们看不到您的真实代码时,要确定发生了什么比正常情况更难。

其次,您readLine()无缘无故地调用了两次,然后headLine即使它为空也写出来。您的代码不应该是:

if (headLine != null)
{
  Reverse(br, pw);
  pw.println(headLine);
}

之后没有额外的println

我的猜测是您从不刷新或关闭PrintWriter,并且您已经关闭了自动刷新。不要那样做。或者也许某处有一个例外,它PrintWriter不会报告,因为它吞噬了它们。就我个人而言,我建议只使用 a WriterorBufferedWriter而不是 a PrintWriter,并声明它Reverse可以抛出IOException. 然后确保调用代码在 finally 块中关闭编写器。

我还建议不要为此使用递归,除非您只是将其用作调查递归的一种方式。将整个文件读入字符串列表,将其反转,然后将其全部写出来,会更加明智。

于 2012-04-27T13:02:24.907 回答
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 {
    }
}

在这里,最初将标题发送为“”

于 2012-04-27T13:13:35.380 回答
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);

        }
}
于 2012-04-27T13:23:07.957 回答