我使用文本编辑器使用maven和spring框架构建我的项目。 我可以使用终端
上的命令运行项目根文件夹mvn spring-boot:run
我使用java语句
引用了java文件中的源文件Document doc = builder.parse("src/main/resources/data/resorts.xml");
一切正常。
使用命令
将整个项目导出为war文件时mvn package
终端上的
我在根目录的目标文件夹中获得了一个war文件
我使用命令
运行war文件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目录中。
答案 0 :(得分:1)
您可能会遇到从URI类接收到jar中文件的路径问题。
Application.class.getClassLoader().getResource("path-to/filename.txt").getPath()
输出:/path-to-your/application.jar!/path-to/filename.txt
如果您尝试创建File对象或Stream到该路径,它将失败并显示FileNotFoundException
如果可能,您应该更改类Document以接收文件的内容或InputStream
。
然后,您可以使用类加载器来获取文件的流而不是路径。
在你的情况下:
InputStream is = Application.class.getClassLoader()
.getResourceAsStream("data/resorts.xml");
然后使用is
对象创建文档。