2012-04-22 20 views
0

「test.txt」という名前のファイルを作成した後、入力をファイルに書き込むためにユーザーからの入力を受けました。すべてうまく動作します。プログラムは何のエラーも全く表示しません。ファイルが作成され、プログラムはユーザーからの入力を受け取りますが、ファイルの内容を確認すると空になりました。私のコードで何が間違っているのか誰でも分かりますか?コードは以下の通りです。ファイルを作成してそれに書き込む

package InputOutput; 

import java.io.*; 

public class CharacterFileReaderAndFileWriter{ 

private BufferedReader br = null; 
private BufferedWriter bw = null; 
private PrintWriter pw = new PrintWriter(System.out, true); 

public File createFile() throws IOException{ 
    File f = new File("test.txt"); 
    return f; 
} 

public void writeToFile() throws IOException{ 
    try{ 
     bw = new BufferedWriter(new FileWriter(createFile())); 
    } 
    catch(FileNotFoundException ex){ 
     ex.printStackTrace(); 
    } 

    //take input from the console (user) 
    br = new BufferedReader(new InputStreamReader(System.in)); 
    String s; 

    pw.println("Please enter something"); 
    pw.println("To stop the program, enter 'stop'"); 

    do{ 
     s = br.readLine(); 
     if(s.compareTo("stop")==0) 
      break; 
     s+= "\r\n";//adding an new line to the string s   
     bw.write(s);    
    } 
    while(s.compareTo("stop")!=0); 

    br.close(); 
    bw.close(); 

} 

public static void main(String[] args) throws IOException{ 

    CharacterFileReaderAndFileWriter cfr = new CharacterFileReaderAndFileWriter(); 
    cfr.writeToFile(); 
} 

}

+0

私はあなたのコードを試しました。それは何の変更もなく私のためにうまくいった。出力ファイルには、入力したテキストが含まれています。特定の条件下でファイルの内容を取得していませんか? – krishnakumarp

+0

これで動作します。ソースコードファイルと同じフォルダにファイルが作成されていないため、フルパスを指定しました。あなたにお時間をいただきありがとうございます。心から感謝する。 :) –

+0

@krishnakumarpええ、IDEは実際にファイル名でディレクトリに私のためのファイルを作成しませんでした。だから私はファイルを作成中に完全なパスを入力しました。今すぐ正常に動作しています –

答えて

1

ほとんどのサンプルプログラムは、あなたが.close()前に、あなたのBufferedWriter.flush()を呼び出す必要があることを示しています。これは必須ではありません。.close().flush()に自動的に電話する必要がありますが、怪我をすることはありません。また、すべてのStream/Writerオブジェクトを.close()メソッドと逆の順に呼び出す必要があります。正しく書かれたクラスは、ラップするすべてのオブジェクトに対して.close()を呼び出す必要がありますが、とにかくそれをすることはありません。後であなたをキャッチする可能性がある

他のもの:

if(s.compareTo("stop")==0) 

if ("stop".equalsIgnoreCase(s)) 

それは、より効率的であるsNullPointerExceptionの可能性を排除し、停止のいずれかの場合を扱うする必要があります最も重要なのは、使用するよりも慣用的なJavaです。.compareTo()

s+= "\r\n";//adding an new line to the string s   
    bw.write(s);   

bw.write(System.getProperty("line.separator"));   
    bw.write(s);   

s+=を収集する必要がある中間オブジェクトとゴミを作成しなければなりません。ハードコーディングの行末も悪いです。

+0

Isn writeToFile()メソッドの最後にcloseが呼び出されましたか? – lrAndroid

+0

BufferedWriterで.close()を呼び出しました。メソッドwriteToFile()の終わりです。 –

+0

これは私がこれ(または若か)の答えを理解できない理由です。 – lrAndroid

-2

出力ストリームを閉じる必要があります。 file.close();

関連する問題