当前位置: 首页 > 知识库问答 >
问题:

从Heroku中的资源读取xml文件时出错[duplicate]

阎伟志
2023-03-14

错误:

java.io.FileNotFoundException: class path resource [xml/ruleSet.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/app/target/******-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/xml/ruleSet.xml

代码:

File ruleSet = new ClassPathResource("xml/ruleSet.xml").getFile();
pmdConfiguration.setReportFormat("text");
pmdConfiguration.setRuleSets(ruleSet.getAbsolutePath());

我需要插入完整的文件到setRuleSets方法,如何将FileInputStream帮助我在这里?

FileInputStream ruleSet = new FileInputStream(ClassLoader.getSystemResource
                    ("xml/ruleSet.xml").getPath());

我应该通过读取fileinput流并将该文件路径传递给setRuleSets方法来重新创建临时文件吗?

共有2个答案

高豪
2023-03-14

好吧,我想好了该怎么办,

我们已经有了输入流,所以我将输入流转换为临时文件,并使用了该文件。获取路径。

ClassLoader classLoader = this.getClass().getClassLoader();
InputStream resourceAsStream = classLoader.getResourceAsStream("xml/ruleSet.xml");
String ruleSetFilePath = "";
if(resourceAsStream != null){
    File file = stream2file(resourceAsStream);
    ruleSetFilePath = file.getPath();

}
pmdConfiguration.setRuleSets(ruleSetFilePath);

public static File stream2file (InputStream in) throws IOException {
final File tempFile = File.createTempFile("ruleSet", ".xml");
tempFile.deleteOnExit();
try (FileOutputStream out = new FileOutputStream(tempFile)) {
    IOUtils.copy(in, out);
}
return tempFile;
}
阙佐
2023-03-14

根本问题是JAR文件中资源的文件系统命名空间中没有路径。这就是为什么ClassPathResource::getFile抛出异常,这也是为什么URL::getPath

还有一种选择。使用InputStream,而不是FileInputStream,并使用classloader API方法将资源作为流打开。

更改:

    FileInputStream ruleSet = new FileInputStream(ClassLoader.getSystemResource
                    ("xml/ruleSet.xml").getPath());

    InputStream ruleSet = ClassLoader.getSystemResourceAsStream("xml/ruleSet.xml");

在这种情况下,这将不起作用,因为PMDConfiguration::setRuleSets不接受流参数。

但是,javadoc声明:

public void setRuleSets(String ruleSets)

设置命令1规则集URI的分隔列表。

由于getResources方法返回一个URL,您应该能够这样做:

    pmdConfiguration.setRuleSets(
        ClassLoader.getSystemResource("xml/ruleSet.xml").toString();

更新

如果getSystemResourcegetsystemresourceastream失败,则资源不存在(在运行时类路径上的JAR等中),路径不正确,或者您应该使用getResourcegetresourceastream

1-命令是一个错字。应该是“逗号”。

 类似资料:
  • 问题内容: 我有一个XML文件,需要在Android SDK中进行解析。 如何从资源中读取XML文件路径? XML包含: 问题答案: 将其放在文件夹下。然后,您可以使用以下命令打开它: 这里有一个有关如何使用的示例: http://android-er.blogspot.com/2010/04/read-xml-resources-in-android- using.html

  • 我想从我的jar中读取一个资源,如下所示: 在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException: 我真的不知道为什么,但通过一些测试我发现如果我改变 至 然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。 我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

  • 我想读一个属性文件,如下所示: 但当我尝试这样做时,我会出现一个错误: 线程“main”java中出现异常。lang.NullPointerException:inStream参数在java中为null。base/java。util。物体。java上的requirennoull(Objects.java:246)。base/java。util。财产。在majorbot加载(Properties.j

  • 需要帮助修复此错误。我试图打印出字符串国家名称的数组长度。 我从一个简历文件阅读,我一直得到上面的错误。下面是我的代码: 下面是我的TestCSV类文件: 我的csv文件如下所示:这是一个摘要,因为我不想打印出全部252个国家。基本上,我把252个国家的数据存储在一个字符串数组中,年份存储在一个整数数组中,每个国家的蜂窝数据统计数据存储在一个二维双数组中。我是编程新手,我想知道我的方向是否正确,如

  • 我有一个名为的项目,它有以下结构: 所以这两个文件的路径是: 我想读测试文件。TestDataProvider中的json。JAVA 我曾经用过 我看到从URL res=getClass(). getClassLoader(). getResources("testfile.json")返回; 有人能帮我吗?

  • 我有一个文本文件(.txt),我想成为以后可以扫描的资源。 在pubspec.yaml,我已经确保: 存在。该文件位于我创建的文件夹中,与和处于同一级别 我试图从自定义类读取文件,而不是小部件。 根据文档,我将使用此导入: 然后开始这样读: 要获得实际数据,请执行以下操作: 但是,当我使用