读取位于同一目录中的XML文件

时间:2012-07-17 23:16:13

标签: java file-io

我知道之前已被问过并回答过,但我无法让它发挥作用。

所以,我的文件层次结构是:

+ 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");以及类似的内容,但它总是相同。

有什么想法吗?

感谢您阅读

1 个答案:

答案 0 :(得分:1)

因此,如果您使用getResource(),它将尝试使用用于加载该类的类加载器来查找您的文件。这可能是(至少后来)你的应用程序打包的jar文件,我不认为你是在尝试从那里加载你的存档游戏:)

我将以与保存文件相同的方式加载文件:

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

(你可能需要抓住一个额外的例外)