2013-04-02 10 views
49

次のコードはファイルを生成しません(ファイルはどこにも表示されません)。 何が欠けていますか?テキストファイルの書き方Java

try { 
    //create a temporary file 
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
     Calendar.getInstance().getTime()); 
    File logFile=new File(timeLog); 

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile)); 
    writer.write (string); 

    //Close writer 
    writer.close(); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 
+1

1-閉じる前に 'writer.flush()'を呼び出すようにしてください。 2ファイルを書き込もうとしているところで例外 – MadProgrammer

+0

があっても 'Writer'が確実に閉じられるように' finally'ブロックを使用していますか? timeLogのフルパスを指定する必要があります。例はC:\ですか? –

+1

@ user717630本当にありません。パスがなければ、ファイルは現在の "working"ディレクトリに書き出されます。通常はプログラムが実行されたディレクトリです... – MadProgrammer

答えて

102

私はあなたの期待と現実が一致しないと思います(ただし、彼らがこれまで行うとき;)あなたはファイルが書き込まれると、ファイルが実際に書かれているところだと思う基本的には)

は、(等しくありませんうーん、多分私はif文を書く必要があります;))

public class TestWriteFile { 

    public static void main(String[] args) { 
     BufferedWriter writer = null; 
     try { 
      //create a temporary file 
      String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()); 
      File logFile = new File(timeLog); 

      // This will output the full path where the file will be written to... 
      System.out.println(logFile.getCanonicalPath()); 

      writer = new BufferedWriter(new FileWriter(logFile)); 
      writer.write("Hello world!"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       // Close the writer regardless of what happens... 
       writer.close(); 
      } catch (Exception e) { 
      } 
     } 
    } 
} 

はまた、あなたの例では、既存のファイルを上書きすることに注意してください。あなたは、ファイルにテキストを追加したい場合は、代わりに次の操作を行う必要があります。

writer = new BufferedWriter(new FileWriter(logFile, true)); 
+1

最後の部分ではありません: 'writer = new BufferedWriter(新しいFileWriter(logFile、true));' ?? appendパラメータはFileWriter用であり、BufferedWriter用ではないからです。 –

+0

@third_eyeあなたは私の楽しみを台無しにしています;)いいえキャッチ、私は答えを更新しました – MadProgrammer

+0

それはまた、エンコーディングを指定することをお勧めします: 'new FileWriterWithEncoding(logFile、" UTF-8 "、true) –

14

私はMadProgrammerの回答にもう少しを追加したいと思います。複数行の書き込みの場合には

writer.write(string); 

一つは改行文字を省略したり、デバッグ中に表示されるか、同じテキストが印刷されている場合にもかかわらず、書き込まれたファイルにスキップされることがあり、コマンドを実行します

System.out.println("\n"); 

このように、テキスト全体が大部分の場合、望ましくない1つの大きな塊として表示されます。 改行文字は、プラットフォームに依存することができますので、代わりに「\ nを」の改行変数を使用して、その後

String newline = System.getProperty("line.separator"); 

を使用してJavaシステムプロパティからこの文字を取得することをお勧めします。これはあなたが望む方法で出力を得るでしょう。 Javaの7では

+1

writer.newLine()は、System.getProperty( "line.separator")から取得した行区切り文字を直接書き込みます。 – Mike

13

は今

try(BufferedWriter w = ....) 
{ 
    w.write(...); 
} 
catch(IOException) 
{ 
} 

を行うことができますし、w.closeは自動的

0

あなたはJavaのライブラリを試すことができます行われます。 FileUtils、それはファイルに書き込む多くの機能があります。

3

実際にファイルを作成したことがないので、ファイルを作成していません。あなたはそれのための目的を作りました。インスタンスを作成しても、ファイルは作成されません。

File newFile = new File("directory", "fileName.txt"); 

あなたはファイルにするには、この操作を行うことができます。

newFile.createNewFile(); 

フォルダを作るためにこれを行うことができた:

newFile.mkdir(); 
0

それは私と一緒に動作しません。 timeLogの横に ".txt"を追加してください。私はNetbeansで開かれた簡単なプログラムでそれを使い、メインフォルダ(ビルダーとsrcフォルダがある)にプログラムを書き出します。

関連する問題