2012-07-18 107 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內的文件進行讀寫?」獲取更多提示。