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ブロックがあります。実際のコードが表示されない場合、何が起こっているのかを確実に知ることは通常よりも困難です。

第二に、あなたは明白な理由もなく2回電話をかけ、それがnullであってもreadLine()書き出すことになります。headLineあなたのコードは本当にあるべきではありません:

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

println後で余分なものなしで?

私の推測では、あなたは決してフラッシュしたり閉じたりしておらずPrintWriter、自動フラッシュがオフになっています。そうしないでください。あるいは、どこかに例外があり、それPrintWriterがそれらを飲み込んでいるために報告されないかもしれません。個人的には、の代わりにWriterまたはを使用して、をスローできることを宣言することをお勧めします。次に、呼び出し元のコードがfinallyブロックでライターを閉じることを確認します。BufferedWriterPrintWriterReverseIOException

また、再帰を調査する方法としてこれを使用している場合を除いて、これには再帰を使用しないことをお勧めします。ファイル全体を文字列のリストに読み込み、それを逆にしてから、すべて書き出すのははるかに賢明です。

于 2012-04-27T13:02:24.907 に答える
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 に答える
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 に答える