在 Spring Boot JAR 中包含外部文件
Posted
技术标签:
【中文标题】在 Spring Boot JAR 中包含外部文件【英文标题】:Include an external files in Spring boot JAR 【发布时间】:2018-03-05 12:30:10 【问题描述】:我创建了一个 Spring Boot 应用程序,它读取一个 Excel 文件以在前端显示数据,因此基本上它是持久数据的来源。我能够从我的 Eclipse 中正确运行,但是当我创建一个 Spring Boot jar 并从命令行运行它时它会失败,因为文件不包含在 jar 中。
我尝试了两个位置 src/main/resources 和 /src/main/webapp/WEB-INF/external/ 但在这两种情况下文件都不包括在内。
代码:
private static final String FILE1 = "\\src\\main\\webapp\\WEB-INF\\external\\file1.csv";
private static final String FILE2 = "\\src\\main\\webapp\\WEB-INF\\external\\file2.csv";
private static String currentDirectory = Paths.get(".").toAbsolutePath().toString();
private static String completeAbsolutePath = currentDirectory
.substring(0, currentDir.length() - 1)
.replace("\\", "\\\\");
reader = new CSVReader(new FileReader(completePath + FILE1))
错误:
java.io.FileNotFoundException: c:\delete\src\main\webapp\WEB-INF\external\File1.csv
有人可以帮忙吗?
【问题讨论】:
请将代码粘贴到您引用文件的位置 ***.com/questions/22886083/… 嗨@zuckermanori 这是代码:我从两个文件中读取数据(将它们视为两个单独的数据库表) private static final String FILE1 = "\\src\\main\\webapp\\ WEB-INF\\external\\file1.csv";私有静态最终字符串 FILE2 = "\\src\\main\\webapp\\WEB-INF\\external\\file2.csv";私有静态字符串 completeAbsolutePath = currentDir.substring(0, currentDir.length() - 1).replace("\\", "\\\\"); reader = new CSVReader(new FileReader(completePath + FILE1)) 这是我现在得到的错误:java.io.FileNotFoundException: c:\delete\src\main\webapp\WEB-INF\external\File1.csv(系统找不到指定路径) 请编辑您的问题并添加代码和错误信息 【参考方案1】:这里有两个问题:
-
你把资源放在
src
文件夹下
而不是创建一个指定的资源文件夹并将其放在那里。
为此,您应该同时创建一个名为“resources”的文件夹
级别为“src”右键单击文件夹,选择“将目录标记为->
资源根"
您指的是具有相对路径的文件。这可能适用于 eclipse 但是当你将它作为一个 jar 运行时,路径会改变并且 相对路径不再正确。
要使用这样的资源,您应该使用ClassLoader
API
ClassLoader.getResourceAsStream(String name)
获取您的资源。
它应该类似于以下内容:
reader = new CSVReader(new InputstreamReader(ClassLoader.getResourceAsStream(completePath +
文件1)));
【讨论】:
你打开jar看到文件不存在了吗? 我能够使用您提供的语句将文件包含在 jar 中。我已将文件放在资源文件夹中,而是将它们包含在 JAR 文件中。谢谢。该应用程序仍未从命令提示符运行,但我相信这是一个不同的问题。以上是关于在 Spring Boot JAR 中包含外部文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 gradle java 项目中包含外部 .jar? [复制]
如何将外部jar文件传递给spring boot项目? [复制]
pom文件配置打包外部/自定义jar文件在fat spring boot可执行jar文件中