我正在尝试使用Jaxb来解组xml文件。由于某种原因我不明白,我不能在我的特定计算机上引用任何其他位置然后是完整路径。在下面的代码中,注释行不起作用,但只有上面的行。该文件确实存在(在两个位置),并且注释行可以在不同的类上工作。
JAXBContext jc = JAXBContext.newInstance(Monopoly.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
//unmarshaller.unmarshal(new File("resources/monopoly_config.xml" ));
unmarshaller.unmarshal(new File( "C:\\Users\\Lior\\Documents\\NetBeansProjects\\Monopoly curr\\MonopolyServer\\src\\BoardInfoResources\\monopoly_config.xml"));
答案 0 :(得分:1)
<强>更新强>
由于您要部署到服务器(来自您的评论),为什么不使用ClassLoader加载XML?在服务器环境中,您将无法以您希望的方式依赖File对象(正如您已经发现的那样):
ClassLoader cl = Monopoly.class.getClassLoader();
InputStream xml =
cl.getResourceAsStream("resources/monopoly_config.xml");
JAXBContext jc = JAXBContext.newInstance(Monopoly.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Monopoly monopoly = (Monopoly) unmarshaller.unmarshal(xml);
JAXB将允许您解组任何有效的文件对象。它肯定会解组用相对路径创建的文件(请参阅下面的答案中的示例):
在您的示例中,您需要确保正确设置了工作目录。基于您的完整路径:
"C:\\Users\\Lior\\Documents\\NetBeansProjects\\Monopoly curr\\MonopolyServer\\src\\BoardInfoResources\\monopoly_config.xml"
假设您的工作目录是:
"C:\\Users\\Lior\\Documents\\NetBeansProjects\\Monopoly curr\\MonopolyServer\\src\\"
您的相对路径似乎是错误的(因为没有资源目录):
"resources/monopoly_config.xml"
你可能意味着:
"BoardInfoResources/monopoly_config.xml"