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

java.io.FileNotFoundException:类路径资源,即使文件存在于src/main/resources中

朱鹏
2023-03-14

我的XML文件位于src/main/resources目录下。我的spring代码看起来像

import java.io.IOException;
import java.util.concurrent.atomic.AtomicLong;

import com.google.common.base.Charsets;
import com.google.common.io.Files;
import org.springframework.core.io.ClassPathResource;
import org.springframework.integration.xml.transformer.XsltPayloadTransformer;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BdeApplicationController {

    @GetMapping("/ping")
    @ResponseBody
    public String ping(@RequestParam(name="name", required=false, defaultValue="Stranger") String name) {
        return myFlow();
    }

    private String myFlow() {
        XsltPayloadTransformer transformer = getXsltTransformer();
        return transformer.transform(buildMessage(getXMLFileString())).toString();
    }

    private String getXMLFileString() {
        try {
            return Files.toString(new ClassPathResource("XML1.xml").getFile(), Charsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }

    private XsltPayloadTransformer getXsltTransformer() {
        return new XsltPayloadTransformer(new ClassPathResource("XSLT1.xsl"));
    }

    protected Message<?> buildMessage(Object payload) {
        return MessageBuilder.withPayload(payload).build();
    }
}

运行此代码时,我得到以下异常:-

java.io.FileNotFoundException:类路径资源[xml1.xml]无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:file:/users/user/documents/project/target/bde-0.0.1-snapshot.jar!/boot-inf/classes!/xml1.xml

你能建议我怎么修吗?

共有1个答案

孙承弼
2023-03-14

当您使用resource.getFile()时,您需要在文件系统中查找该文件,这就是当您将其作为JAR运行时无法工作的原因。

尝试输入流

String data = "";
ClassPathResource resource = new ClassPathResource("/XML1.xml");
try {
    byte[] dataArr = FileCopyUtils.copyToByteArray(resource.getInputStream());
    data = new String(dataArr, StandardCharsets.UTF_8);
} catch (IOException e) {
    // do whatever
}
 类似资料:
  • 我有一个目录结构如下的maven模块,我想在中获取的路径 我使用进行了尝试,但它给出了一个空值。 无法获取资源的路径

  • 我想从maven资源目录(src/main/resources)中读取我的属性文件。属性文件的路径称为: 该文件名为test。财产。我使用了JSF2.2、Eclipse和Java Web项目,webapp在Tomcat7上运行 我在mavenpom.xml文件中写道: 并在我的java文件中写入:Properties prop=new Properties(); 但是它没有找到属性文件。我可以读出

  • 新手来了!我在SO上发现了很多类似的问题,但没有一个给我一个明确的答案。 我尝试过的一个可能的解决方案是不运行这些脚本(从'classpath:db/schema.sql'中删除init=runscript\\从'classpath:db/data.sql'中删除runscript),在测试之前以编程方式创建一些对象并将它们持久化到数据库,然后编写test,但我认为从脚本填充数据比在每个测试类中编

  • 我想问一下,如何在SpringBoot中将文件夹作为资源或文件加载。假设我有src/main/resources/testfolder,我想做如下事情: ^但这将失败,因为ResourceUtils只能加载实际文件(.txt、.csv等),不是文件夹。。提前非常感谢。。 编辑: 原因是我需要得到文件夹的绝对路径... folderpath应该是“/workspace/intellij/Projec

  • 我正在尝试访问src/main/Resources/XYZ/view文件夹中的xsd,其中XYZ/view文件夹是由我创建的,文件夹具有我需要进行xml验证的abc.xsd。 当我每次尝试访问xsd时,结果为null, 我试过了, 1) 2) 以及我为获取资源或类加载器等而进行的更多跟踪。 最后我得到了xsd, 文件文件 = 新文件(新类路径资源(“/src/main/resources/XYZ/

  • 我试图为我的项目设置配置位置,但我一直得到以下错误: java.io。FileNotFoundException:无法打开类路径资源[main/resources/app context.xml],因为它不存在 我的项目设置如下: 我将我的代码设置为: 我该怎么解决这个问题?