与 IntelliJ 中的 运行 应用程序和 运行 JAR 文件的区别
Difference from running application in IntellJ and running JAR file
我遇到过这样一种情况,当我在 intellJ 中 运行 应用程序并且一切顺利 运行 时,我会使用 maven install 命令创建一个 jar 并尝试 运行ning 它从命令行手动执行,结果如下:
命令行
java.lang.RuntimeException: java.io.FileNotFoundException: api\src\main\resources\FAQ.pdf (The system cannot find the path specified)
at test.test.paisy.test.test.domain.email.FaqAttachment.pdfToBytes(FaqAttachment.java:27) ~[classes!/:0.0.1-SNAPSHOT]
问题:
- 运行ning Jar 和 运行ning App 有什么区别
IntelliJ
- 为什么找到文件路径后会报错
运行在 ItelliJ
中成功
文件路径
try (FileInputStream inputStream = new FileInputStream(new File("api/src/main/resources/FAQ.pdf"))) {
this.bytes = ByteStreams.toByteArray(inputStream);
谢谢
首先,如果要使用相对路径,需要从src文件夹开始,像这样
new File("src/main/resources/FAQ.pdf")
但最好的方法是使用
InputStream inputStream = ClassName.class.getClassLoader().getResourceAsStream("FAQ.pdf");
这样路径就不会相对于该静态路径。
不要忘记将 ClassName
替换为您当前 class
的名称
确保在 运行.
之前清理构建然后重建
有关详细信息,请查看此
好吧,首先在这段代码中 new File("api/src/main/resources/FAQ.pdf")
你有相对路径。所以它取决于 属性 System.getProperty("user.dir")
并基于此 属性.
形成绝对路径
当您 运行 jar 文件时,此 属性 设置为您的当前目录
例如你有目录结构
root
dir1
dir2
java-file.jar
cd /root/dir1
java -jar ../dir2/jar-file.jar
- 那么你的 user.dir = /root/dir1 和你的文件将在 /root/dir1/api/src/main/resources/FAQ.pdf
在Idea中你可以在运行配置中指定工作目录。
从资源目录获取数据的更好方法是做这样的事情
YourClassName.class.getClassLoader().getResourceAsStream(("FAQ.pdf")
我遇到过这样一种情况,当我在 intellJ 中 运行 应用程序并且一切顺利 运行 时,我会使用 maven install 命令创建一个 jar 并尝试 运行ning 它从命令行手动执行,结果如下:
命令行
java.lang.RuntimeException: java.io.FileNotFoundException: api\src\main\resources\FAQ.pdf (The system cannot find the path specified)
at test.test.paisy.test.test.domain.email.FaqAttachment.pdfToBytes(FaqAttachment.java:27) ~[classes!/:0.0.1-SNAPSHOT]
问题:
- 运行ning Jar 和 运行ning App 有什么区别 IntelliJ
- 为什么找到文件路径后会报错 运行在 ItelliJ 中成功
文件路径
try (FileInputStream inputStream = new FileInputStream(new File("api/src/main/resources/FAQ.pdf"))) {
this.bytes = ByteStreams.toByteArray(inputStream);
谢谢
首先,如果要使用相对路径,需要从src文件夹开始,像这样
new File("src/main/resources/FAQ.pdf")
但最好的方法是使用
InputStream inputStream = ClassName.class.getClassLoader().getResourceAsStream("FAQ.pdf");
这样路径就不会相对于该静态路径。
不要忘记将 ClassName
替换为您当前 class
确保在 运行.
之前清理构建然后重建有关详细信息,请查看此
好吧,首先在这段代码中 new File("api/src/main/resources/FAQ.pdf")
你有相对路径。所以它取决于 属性 System.getProperty("user.dir")
并基于此 属性.
当您 运行 jar 文件时,此 属性 设置为您的当前目录 例如你有目录结构
root
dir1
dir2
java-file.jar
cd /root/dir1
java -jar ../dir2/jar-file.jar
- 那么你的 user.dir = /root/dir1 和你的文件将在 /root/dir1/api/src/main/resources/FAQ.pdf
在Idea中你可以在运行配置中指定工作目录。
从资源目录获取数据的更好方法是做这样的事情
YourClassName.class.getClassLoader().getResourceAsStream(("FAQ.pdf")