2012-07-17 78 views
1

我知道這是之前被問及的答案,但我無法使其工作。閱讀位於同一目錄中的XML文件

所以,我的文件層次是:

+ Project 
    + build.xml 
    + save.xml 
    + src 
    + build 

我有「保存」文件保存在一個給定時刻遊戲的狀態。應該很容易覆蓋並且易於閱讀,以便在遊戲中再次加載所有內容。

我保存()就是這樣的,它似乎是工作:

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(); 
} 

game.save()是在實際做什麼,我想要做遊戲的方法。它遞歸地和所有的,我知道它工作正常,因爲我打開與另一個程序的XML文件。

所以,我的問題從這裏開始。我getinfofromxml()方法是:

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

我的問題是,當嘗試運行它(通過ANT),沒有測試將通過。我去日食,我可以看到,當我嘗試加載遊戲時,它會拋出Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

我試過改變線URL fileWithData=getClass().getResource("./save.xml");URL fileWithData=getClass().getResource("save.xml");URL fileWithData=getClass().getResource("../save.xml");和類似的東西,但它說永遠都是一樣的。

有什麼想法?

感謝您閱讀

+0

如果你使用'的getClass()的getResource()'方法,那麼該文件應在類路徑 – 2012-07-17 23:23:51

+0

它認爲是我的班級路徑中的IS。我如何檢查它? (對不起,因爲如此無知) – FDrico 2012-07-17 23:35:09

回答

1

所以,如果你使用的getResource(),它會嘗試使用用於加載類的類加載器來查找文件。這可能是(至少晚些時候)你的應用程序打包的jar文件,我不認爲這就是你試圖從那裏加載你的存儲遊戲:)

我會加載文件的方式與你相同保存:

URL fileWithData= new File("save.xml").toURI().toURL(); 

(你可能要搭上額外的除外)

+0

你,先生,是一位救世主。謝謝! – FDrico 2012-07-17 23:37:59

+0

沒問題... :) – kritzikratzi 2012-07-17 23:41:43