JAXB无法从相对路径中找到文件

时间:2011-05-25 16:25:52

标签: java file-io jaxb

我正在尝试使用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"));

1 个答案:

答案 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"