Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何指定war文件中资源的路径?_Java_Spring_Maven_Ubuntu 14.04_Relative Path - Fatal编程技术网

Java 如何指定war文件中资源的路径?

Java 如何指定war文件中资源的路径?,java,spring,maven,ubuntu-14.04,relative-path,Java,Spring,Maven,Ubuntu 14.04,Relative Path,我已经使用文本编辑器使用maven和spring框架构建了我的项目。 我能够使用终端上的命令在根文件夹中运行项目 mvn spring-boot:run 我已经使用java语句引用了java文件中的源文件 Document doc = builder.parse("src/main/resources/data/resorts.xml"); 一切正常 当我使用命令将整个项目导出为war文件时 mvn package java -jar filename.war 终端上 mvn sprin

我已经使用文本编辑器使用maven和spring框架构建了我的项目。 我能够使用终端上的命令在根文件夹中运行项目

mvn spring-boot:run
我已经使用java语句引用了java文件中的源文件

Document doc = builder.parse("src/main/resources/data/resorts.xml");
一切正常

当我使用命令将整个项目导出为war文件时

mvn package
java -jar filename.war
终端上

mvn spring-boot:run
我在根目录的目标文件夹中得到一个war文件

我使用命令运行war文件

mvn package
java -jar filename.war
没有编译错误,但在运行时显示错误java.io.FileNotFoundException

我想我没有正确指定引用文件的路径

您能否提及必须如何在路径字符串中提及相对路径,以使其能够从war文件运行

我的目录结构是

.
    |-- src
    |   `-- main
    |       |-- java
    |       |   `-- hello
    |       |       `-- org
    |       |           `-- json
    |       `-- resources
    |           |-- data
    |           `-- templates
    `-- target
        |-- classes
        |   |-- data
        |   |-- hello
        |   |-- org
        |   |   `-- json
        |   `-- templates
        |-- generated-sources
        |   `-- annotations
        |-- gs-handling-form-submission-0.1.0
        |   |-- META-INF
        |   `-- WEB-INF
        |       |-- classes
        |       |   |-- data
        |       |   |-- hello
        |       |   |-- org
        |       |   |   `-- json
        |       |   `-- templates
        |       `-- lib
        |-- maven-archiver
        `-- maven-status
            `-- maven-compiler-plugin
                `-- compile
                    `-- default-compile

    33 directories

java文件位于hello目录中。

您可能遇到了从URI类接收到位于jar中的文件的路径问题

Application.class.getClassLoader().getResource("path-to/filename.txt").getPath()
输出:
/path到您的/application.jar//filename.txt的路径

如果您尝试创建指向该路径的文件对象或流,它将失败,出现
FileNotFoundException

如果可能,您应该更改类文档以接收文件内容或
InputStream
。 然后可以使用类加载器获取文件的流,而不是路径

就你而言:

InputStream is = Application.class.getClassLoader()
            .getResourceAsStream("data/resorts.xml");

然后使用
is
对象创建文档。

使用
ClassPathResource
-eg
newclasspathResource(“/data/resorts.xml”)
,然后使用
InputStream
s.I努力尝试并替换语句文档doc=builder.parse(“src/main/resources/data/resorts.xml”);语句Resource Resource=newclasspathresource(“/data/resorts.xml”);Document doc=builder.parse(IOUtils.toString(新类路径资源(“包/资源”).getInputStream());但仍然会出现错误java.io.FileNotFoundException:类路径资源[package/resource]无法打开,因为它不存在。请提供帮助?我应该如何用java解析该文件?您可以添加完整的stacktrace吗?使用资源时不应抛出
FileNotFoundException