7

だから私は友人のために Bukkit プラグインを書こうとしてきましたが、何らかの理由で構成の生成が機能していません。問題のコードは以下のとおりです。この問題を解決するために必要なコードがあれば喜んで追加します。プログラムを実行すると、作成された構成ファイルが空白になります。テストファイルは問題ありません (ファイルを削除する行をコメントアウトするだけでテストしました) が、複数の行を取得しようとすると失敗します。誰でも助けることができますか?

PrintWriter out = new PrintWriter(new FileWriter(config));
out.println("########################################");
out.println("#  hPlugin is written by newbiedoodle  #");
out.println("########################################");
out.println("#   -----  Plugin config file  -----   #");
out.println("########################################");
out.println("NOTE: Do not edit the config file besides changing the values - it may result in errors.");
out.println("--------------");
out.println("Strikes before being banned?");
out.println("3");
out.println("Godmode?");
out.println("true");
out.println("First time running the plugin?");
out.println("true");
out.println("Curse protection?");
out.println("true");
out.println("Emergency shelter?");
out.println("true");
out.println("Path building?");
out.println("true");
out.println("Blocked words/phrases (Separate with comma)");
out.println("[censored]");
out.close();
System.out.println("Successfully wrote defaults to config");

ポップアップする可能性のあるエラーをキャッチするためだけに、全体が try/catch ループで囲まれています。非常に明白な何かが欠けているような気がしますが、それが何であるかを見つけることができません。

  • config必要なパスを持つFileオブジェクトなので、それだとは思いません

  • エラーが発生した場所をユーザーに正確に伝えることができるように、プログラムにほとんどすべてを個別に実行させます。そのため、ファイルはtry/のすぐ外側に作成されますcatch

4

3 に答える 3

7

あなたは電話する必要があります...

out.flush();

...電話する直前に...

out.close();

PrintWriter はメモリ内のバッファを使用して、ディスクをより効率的に使用します。PrintWriter にデータを書き込むように指示するには、flush() を呼び出す必要があります。

于 2012-11-29T15:13:42.427 に答える
2

ほとんどの場合、これを複数回実行して、あるファイルに書き込み、別のファイルをチェックしています。ファイル名は同じだと思いますが、おそらく作業ディレクトリに基づくディレクトリは、あなたが思っているものではありません。

PrintWriter はBufferedWriterを使用し、他の Writer クラスはバッファリングされないため、この状況では close 呼び出しがフラッシュされます。

  251       public void flush() throws IOException {
  252           synchronized (lock) {
  253               flushBuffer();
  254               out.flush();
  255           }
  256       }
  257   
  258       public void close() throws IOException {
  259           synchronized (lock) {
  260               if (out == null) {
  261                   return;
  262               }
  263               try {
  264                   flushBuffer();
  265               } finally {
  266                   out.close();
  267                   out = null;
  268                   cb = null;
  269               }
  270           }
  271       }
于 2012-11-29T15:07:18.180 に答える
0

完了したら、ストリームをフラッシュまたは閉じる必要があります。どちらも終了する前に非常に重要です。Close は自動的に flush() を呼び出します。

于 2012-11-29T15:06:29.797 に答える