2012-07-18 110 views
0

最近我一直在问很多,我的所有帖子都是关于同一个问题,但在不同的阶段和不同的可能的答案(因为具体问题不同于以前的一个,但密切相关)。所以,我很抱歉,如果它看起来像我重复我的问题。事实上,我不是。我一直在Google和这里搜索,但没有一个答案似乎解决了我的问题,或者我弄错了他们。创建并读取jar文件以外的xml文件

好了,我的文件层次是:

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

    + ThisIsWhereIWantMyXMLfileToBe.xml 
    + game.jar 

我的问题基本上是这样的:我的程序应该保存它的状态到一个文件,然后读取该文件。该文件应位于.jar文件(仅有一个)之外,位于同一文件夹中。该文件可以存在或不存在。如果存在,它应该覆盖它。

在我之前的问题中,我询问了关于how to read an xml file that's in the same directory。当我从Eclipse使用它时,我得到的答案实际上解决了我的问题。

但是我需要用我的整个程序创建一个.jar文件,并且我需要我的程序来创建这样的xml文件,只要我这样做。

我保存()就是这样的,它似乎是工作,当我在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 *

所以,我不认为我是犯了太多的错误...

可能蚂蚁有什么关系呢? 有什么想法? 由于事先(和我的英语很抱歉)

回答

1

您读写文件时使用当前启动目录的相对路径的方式...这取决于你在哪里开始JVM和您预期的位置写入和读取你的文件。

+1

是的,一般来说,你应该使用绝对路径来控制你想要的文件的位置。您可以允许用户通过属性或某物来控制此路径。 – 2012-07-18 04:23:53

+0

如果我加倍clic .jar文件..是不是在该目录中启动的jvm? – FDrico 2012-07-18 04:35:40

4

停止思考“当前目录”并放置配置。在user.home中讨论的this answer。长期以来,OS制造商一直告诉我们而不是来进行配置。应用程序目录中的设置。

另请参阅this answer转换为“java程序如何使用jar内的文件进行读写?”获取更多提示。