2012-04-27 23 views
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 

何らかの理由でコードが実行されると、私は、出力ファイルには何も見てないですしかし、それは正しくコンパイルされています。何か案は?

+0

残りの部分を見ることなく、確実にそれを言うことはできません:あなたが必要なもの

がこのように、再びReverseを呼び出した後headline値を書き込むことです。あなたのプリントライターは何を指していますか?あなたは最後にそれを洗い流していますか?ストリームを正しく閉じていますか?また、再帰呼び出しの後に余分なprintln(br.readLine())がある理由がわかりません。私はそれはそれなしで動作するはずだと思う。あなたはまた、キャッチやブロックを持っていないが、私はそれがSOへの貼り付けと関連があると思う。 –

+0

さて、もしそれがヌルなら、それは印刷されます。それから、 'if'条件に戻り、ヌルを取得して出力した後に行を読み込もうとします。例外をチェックしようとしましたか? –

+0

** 'br.readLine()'を2回呼び出さないでください!それがあなたの最初の問題です。ヘッドラインを印刷するだけです。 –

答えて

4

まず、あなたのコードはコンパイルされません - あなたはcatchブロックまたはfinallyブロックのないtryブロックを持っています。あなたの実際のコードを見ることができないときは、何が起きているのかを知ることは普通より難しいです。

第2に、明白な理由のないようにreadLine()を2回呼び出してから、ヌルであってもheadLineを書き出します。

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

println以降はありませんか?

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

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

+0

+1優秀な答え – ChadNC

+1

それは宿題なので、再帰です。メソッド名「Reverse」で簡単に見つけることができます:) –

+0

「宿題」としてタグ付けすればさらに簡単です。 – mcfinnigan

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 { 
    } 
} 

、「」

0

あなたの元のコードは、すべての行がすでに読み込まれた後、新たに読み込まれた行を記述しようとして最初に見出しを送信します。

public void Reverse(BufferedReader br, PrintWriter pw) throws IOException 
{ 
     String headLine = br.readLine(); 

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

     } 
} 
関連する問題