gpt4 book ai didi

java - 无法从绝对路径加载 xml 文件

转载 作者:行者123 更新时间:2023-11-29 05:40:32 25 4
gpt4 key购买 nike

有一个 maven 项目 A。一旦我执行 mvn clean install,项目就会构建并且 jar 在我的本地存储库中可用,即c:\repository\com\stackoverflow\A\A.jar

A.jar 包含几个类和这些类使用的 xml 文件

我正在从另一个 Maven 项目调用使用一个 XML 文件的类中的方法之一。

代码是:

public File xmlFilder(String xmlAbsolutePath) {
File f = new File(xmlAbsolutePath);
return f;
}

第二个项目位于我的D盘。在获取绝对路径时,我得到的是 \com\stackoverflow\A\res\p.xml 这是正确的绝对路径。

但是如果我在第 3 行添加以下代码,我将得到如下结果:

public File xmlFilder(String xmlAbsolutePath) {

File f = new File(xmlAbsolutePath);

System.out.println("AbsolutePath----"+f.getAbsolutePath()); ---> D:\com\stackoverflow\A\res\p.xml

System.out.println("getPath------------"+f.getPath()); ---> \com\stackoverflow\A\res\p.xml

System.out.println("exists--------------"+f.exists()); ----> false

return f;

}

任何人都可以让我知道我要去哪里错了。为什么它不从 C 驱动器中存在的存储库中选择 xml。

最佳答案

如果 A 类(捆绑在您的 A.jar 中)想要从 jar 加载 xml 并尝试以第一个代码示例中显示的方式访问它,那么它不会访问 p.xml 在你的 jar 中。它访问该位置的文件

很容易测试这是否是您的情况。创建 jar 后,暂时从文件系统中删除 p.xml 并运行 A 类。它将无法加载它。

当类需要加载捆绑在 jar 中的资源时,它不使用 File,而是使用类加载器。

根据您提供的名称,我假设您的类 A 在包中:com.stackoverflow.Axml 文件位于 com.stackoverflow.A.res

包中

下面的所有方法都将使用您的 xml 加载流

InputStream is = null;

// Using class - relative to the class location because path does not start with "/"
is = SimpleWriter.class.getResourceAsStream("res/p.xml");

// Using class - absolute path because path starts with "/"
is = SimpleWriter.class.getResourceAsStream("/com/stackoverflow/A/res/p.xml");

// Using classloader - path is *always* absolute. Note that leading "/" is missing
is = SimpleWriter.class.getClassLoader().getResourceAsStream("com/stackoverflow/A/res/p.xml");

关于java - 无法从绝对路径加载 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com