[英]Unable to load xml file from a absolute path
有一个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并尝试以第一个代码示例中显示的方式访问它,那么它就不会访问jar中的p.xml
。 它访问该位置的文件 。
如果这是你的情况,很容易测试。 创建jar后,暂时从文件系统中删除p.xml
并运行A类。 它将无法加载它。
当一个类需要加载捆绑在jar中的资源时,它不会使用File
而是使用类加载器。
从您提供的名称,我假设您的类A在包中: com.stackoverflow.A
xml文件位于包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");
我想你问的是错误的问题。 您可能想知道必须访问p.xml
。 最好的方法是将A.jar放在类路径上,通过在“其他Maven项目”的pom.xml中将其指定为依赖项来实现。 在您的代码中,您执行以下操作:
Foo.class.getResource("/thePackagePath/to/p.xml");
通过尝试将xml作为文件访问,您可以将项目非常糟糕地移植到其他系统。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.