2

このプログラムは出力ファイル名を要求し、うまく機能しているようです。テキストエディタまたはターミナルで出力ファイルを開こうとするまで。次に、そのファイルには何も表示されず、空のファイルだけです。このプログラムはテキスト ファイルを作成しますが、ファイルは空です。事前にご協力いただきありがとうございます。

import java.util.*;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * Writes a Memo file.
 * 
 */
public class MemoPadCreator {
  public static void main(String args[]) {
    Scanner console = new Scanner(System.in);
    System.out.print("Enter Output file name: ");
    String filename = console.nextLine();
  try {
    PrintWriter out = new PrintWriter(filename);

    boolean done = false;
    while (!done) {
      System.out.println("Memo topic (enter -1 to end):");
      String topic = console.nextLine();
      // Once -1 is entered, memo's will no longer be created.
      if (topic.equals("-1")) {
        done = true;
     console.close();
      }
      else {
        System.out.println("Memo text:");
        String message = console.nextLine();

        /* Create the new date object and obtain a dateStamp */
        Date now = new Date();
        String dateStamp = now.toString();

        out.println(topic + "\n" + dateStamp + "\n" + message);
      }
   }
    /* Close the output file */

  } catch (IOException exception) {
    System.out.println("Error processing the file:" + exception);
  }console.close();
  }
}
4

3 に答える 3

5

out.flush()コンテンツをファイルにフラッシュするために使用します。

または、 PrintWriterの auto-flush コンストラクターを使用します(最適なパフォーマンスのオプションではない可能性があります) が、とにかくオプションです

public PrintWriter(Writer out,boolean autoFlush)

autoFlush - ブール値。if trueprintlnprintf、または format メソッドは出力バッファをフラッシュします

于 2013-03-09T08:10:24.310 に答える
2

PrintWriterオブジェクトを閉じていません。コンソールまたはファイルに反映するには、ストリームを閉じる必要があります (outputStream によって異なります)。

out.close();

持っていても

PrintWriter out = new PrintWriter(System.out);
...
...
...
out.close();

次に、出力がコンソールに書き込まれるように閉じる必要があります。
したがって、あなたの場合、ストリームを閉じるとファイルに書き込まれます。

于 2013-03-09T08:57:00.363 に答える
1

PrintWriterコンテンツをメモリ バッファからファイルに書き込むには、をフラッシュする必要があります。

out.flush();

いずれにせよ、OS に応じて、ロックがファイルに残る可能性があるため、常にリソースを閉じる (解放する) 必要があります。またclose()、変更を自動的にフラッシュします。

于 2013-03-09T08:08:37.703 に答える