从classpath和.jar加载文件

时间:2018-07-23 14:40:39

标签: java jar file-read

我制作了一个Spring Boot Web应用程序,启动时必须读取静态(.json)文件。

没问题,当我在Idea中启动应用程序时,它可以工作。但是,如果我运行mvn package,然后启动我启动jar,则给定的路径(BASE_DIR)不再存在,因此找不到文件。

如何解决读取以Idea和.jar开头的文件的问题?

send({ embed: variable })

2 个答案:

答案 0 :(得分:-1)

打包应用程序后,无法从文件系统访问资源文件-因此,您无法使用File列出/打开它们。例如,您需要使用class.readResourceAsStream从JAR读取它们作为资源。从IntelliJ运行时,不是从JAR中读取文件,而是从项目目录中读取文件。

这里有Oracles Java tutorial on how to use resources

另一种解决方案(因为您还有一些读取文件的逻辑),您可以将文件放在JAR中而不作为资源,然后从那里读取。

答案 1 :(得分:-1)

BASE_DIR = "src/main/resources/data/gamedata/"

执行mvn软件包后,src/main/resources文件夹将成为jar的根目录。您可以使用类加载器加载此文件。像这样:

AbstractGameDataService.class.getResourceAsStream("/data/gamedata/<your json file>")

由于您正在使用spring-boot,因此还可以利用spring扫描本身。使用spring可以使用以下命令构建加载文件:classpath:/data/gamedata/<your json file>