0

私は最近多くの質問をしており、私の投稿はすべて同じ問題に関するものですが、段階が異なり、可能な回答も異なります (特定の問題は前のものとは異なりますが、密接に関連しているため)。ですから、私の質問を繰り返しているように見えたら、申し訳ありません。実際、私はそうではありません。私はGoogleとここで検索してきましたが、答えのどれも私の問題を解決していないようです.または私はそれらを間違っています.

さて、私のファイル階層は次のとおりです。

+ MyGame
  + build.xml
  + src
  + ThisIsWhereEclipsePutsTheXMLFile
  + build
    + manyFoldersWithClassFiles
    + aSpecialFolderWhereTheEntryPointIs

    + ThisIsWhereIWantMyXMLfileToBe.xml
    + game.jar

私の問題は基本的にこれです。私のプログラムは、そのステータスをファイルに保存してから、そのファイルを読み取ることになっています。このファイルは、同じフォルダー内の .jar ファイル (1 つだけ) の外にある必要があります。ファイルは存在してもしなくてもかまいません。存在する場合は、上書きする必要があります。

以前の質問で、同じディレクトリにある xml ファイルを読み取る方法について質問しました。私が得た答えは、Eclipseから使用しているときに実際に問題を解決します。

しかし、プログラム全体で.jarファイルを作成する必要があり、プログラムに要求するたびにそのようなxmlファイルを作成する必要があります。

私の save() はこのようなもので、Eclipse で実行すると動作しているように見えますが、.jar ファイルを実行して実行すると動作しません。

public void save(Game game) throws IOException{
    Document doc = DocumentHelper.createDocument();
    doc.add(game.save());
    File save=null;
    save = new File("save.xml");

    FileWriter writer = new FileWriter(save);
    doc.write( writer);
    writer.close();
}

そして、これは私がファイルから情報を取り戻す方法です:

public Game getinfofromxml() throws IOException{
    Game game;
    SAXReader reader = new SAXReader();
    try{
        URL fileWithData= new File( "save.xml" ).toURI().toURL();
        Document document = reader.read(fileWithData);
        Element alreadySavedGame= document.getRootElement();
        game= getGameSaved(alreadySavedGame);
    }catch(DocumentException ex){
        throw new IOException();
    }
    return game;
} 

繰り返しますが、これは Eclipse からは機能しますが、jar ファイルから実行すると機能しません。Eclipse から、xml ファイルは MyGame フォルダーに作成されますが、.jar があるフォルダーには作成されません。.jar を実行すると、XML がまったく作成されません。

今、私はこれがクラスパスと関係があるかもしれないと読んでいます。それで、私がそれをコンパイルする方法を教えてください:

1)ビルドディレクトリを作成するAntを実行します。.jar は自動的に作成されません。2) Manifest.txt ファイルを作成し、次のように記述します。

 Main-Class: aSpecialFolderWhereTheEntryPointIs.MyMainClass
 Class-Path: .

3) cmd で .jar ファイルを作成します。 jar cfm myGame.jar Manifest.txt *

なので、あまりミスをしているとは思えないのですが…

アリが何か関係あるのかな?何か案が?事前に感謝します(そして私の英語で申し訳ありません)

4

2 に答える 2

4

「現在のディレクトリ」について考えるのをやめて、設定を入れてください。この回答user.home説明したように。長い間、OS メーカーはconfig を入れないように言ってきました。アプリケーションディレクトリの設定。

「 Java プログラムは読み書きのために jar 内のファイルをどのように使用できますか?」に対するこの回答も参照してください。その他のヒントについては。

于 2012-07-18T04:25:41.533 に答える
1

ファイルの書き込みと読み取りの方法は、現在の開始ディレクトリの相対パスを使用しています... jvm を開始した場所と、ファイルの書き込みと読み取りを期待する場所によって異なります。

于 2012-07-18T04:20:34.507 に答える