0

こんにちは、Minecraft サーバーの改造プログラムである bukkit のアドオンを作成しています。このプログラムでは、とにかくクラスの場所を提供するために、アドオン テキスト ドキュメントを含むフォルダに jar を入れる必要があります。次に、それは私のクラスを使用し、それをクラスにキャストして、私のクラスが継承する必要があるクラスにキャストします。私は自分のプログラムと同じディレクトリにテキストファイルを書き込もうとしているので、これを書きました(これはマネープログラム用です)(playerNameは、バランスを維持しているプレーヤーであるため、ファイル名として使用したパラメーターです)

try{
    FileWriter fstream = new FileWriter(new File(".").getAbsolutePath()+File.separator+playerName + ".txt",true);
    getLogger().log(Level.INFO,"trying to save text document to " + new File("").getAbsolutePath()+File.separator+playerName + ".tct");
    writer = new BufferedWriter(fstream);
    writer.write("30");
    return 30;
}
catch(Exception err){
     getLogger().log(Level.INFO, "Exception occoured!{0}", err.getMessage());
     return -1;
}

このコードで読み取ろうとすると、例外がスローされます

BufferedReader reader = new BufferedReader(new FileReader(new File(".").getAbsolutePath()+"/"+playerName));
Integer i = Integer.getInteger(reader.readLine());
return i.intValue();

また、それが書いたと思われるテキスト文書が見つかりません。何かアドバイス?また、.jarファイルに保存されないようにファイルに保存しようと思いますが、その方法がわかりません。また、クラスを使用しているプログラムのフォルダにファイルを保存している可能性はありますか? ありがとうXD

4

1 に答える 1

0

それは私が長い間見た中で最も奇妙なものです:

FileWriter fstream = new FileWriter(new File(".").getAbsolutePath()+File.separator+playerName + ".txt",true);
getLogger().log(Level.INFO,"trying to save text document to " + new File("").getAbsolutePath()+File.separator+playerName + ".tct");

クリーンアップを試みます:

File f=new File(playerName + ".txt");
FileWriter fstream = new FileWriter(f, true);
getLogger().log(Level.INFO,"trying to save text document to " + f.getAbsolutePath());

次のこと:作業後は常にファイルを閉じる必要があります。

次に、ファイル名が一致しません。ある時はplayername+".txt"次はただplayername

しかし、最大の間違い:

Integer i = Integer.getInteger(reader.readLine());
return i.intValue();

Integer.getInteger文字列を解析しません。その名前のシステム プロパティを検索し ( という名前のシステム プロパティはありません"30")、存在する場合はこれを整数として解釈します。あなたの場合、それは返されるので、それを呼び出すとnulla が得られます。代わりに使用してください:NullPointerExceptionintValueInteger.parseInt

try(BufferedReader reader = new BufferedReader(new FileReader(playerName+".txt"))) {
  Integer i = Integer.parseInt(reader.readLine());
  return i.intValue();
}
于 2013-09-05T16:13:20.187 に答える