我制作了一个Spring Boot Web应用程序,启动时必须读取静态(.json)文件。
没问题,当我在Idea中启动应用程序时,它可以工作。但是,如果我运行mvn package,然后启动我启动jar,则给定的路径(BASE_DIR)不再存在,因此找不到文件。
如何解决读取以Idea和.jar开头的文件的问题?
send({ embed: variable })
答案 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>