java - 如何获取 jar 外部文件的 Url?
问题描述
我已经使用 maven-assembly-plugin 以爆炸模式部署了 Spring Boot 应用程序。我从项目的资源文件夹中创建了配置文件夹。
问题是我无法获取 url 来访问 config 文件夹中的文件。
如何获取已上传并存储在此配置文件夹中的文件的 url。
文件结构
目标文件夹:
+springdemo-0.0.1-application.zip
+config
+myfolder
-oldfile.png
+springdemo-0.0.1.jar //running this jar file
+start.sh
-springdemo-0.0.1.jar
我想要存储在 myfolder 中的文件的 URL。该 url 将被第 3 方(例如 Picasso)访问以获取文件数据。我无法获得指向此 myfolder 文件的正确 url。
解决方案
注意:不是 SpringBoot 特定的答案,只是简单的 Java 方式。
您只能尝试猜测文件的位置,因为在运行 Java 应用程序时无法知道工作目录。
例如,如果您控制 Java 应用程序的执行方式,您可以尝试一种非常简单的方法:
var configFile = new File("config/application.properties");
只要该过程是从所在的同一目录开始的start.sh
(这似乎是您想要的),这将起作用。
如果它不起作用,请先尝试像这样打印工作目录:
System.out.println("WRK DIR = " + new File(".").getAbsolutePath());
这将告诉您文件的相对路径应该是什么。所以,如果打印出来<root-dir>/springdemo
并且你知道你的配置文件在 下<root-dir>/springdemo/mydir/config/
,那么文件路径应该是:
new File("mydir/config/application.properties");
顺便说一句,您可以通过以下方式轻松读取文件:
// read file into List of lines
Files.readAllLines(configFile);
// specifically, for properties file
var props = new Properties();
props.load(new FileInputStream(configFile));
如果出于某种原因您需要 URL 对象而不是文件,这很简单,只需调用:
URL url = configFile.toURI().toURL()
如果您想要配置目录下的所有文件,您可以首先列出它们:
File[] files = configFile.getParentFile().listFiles();
if (files != null) {
for (File file : files) {
// use file?
}
}
推荐阅读
- sql - 如何从数据库字段解析 XML?
- android - 如何修复 Windows 10 上的 Android Studio adb 错误?
- wifi - 如何通过按钮触发将深度睡眠结合到 ESP8266-01
- mongodb - addfields 聚合字段实际上是否将字段添加到集合中?
- java - 从 PubSub 到 Java API 的 Snowplow 数据处理
- sql - SQL 中的 ALL 函数背后的逻辑。我需要一些关于 W3 School 关于 ALL 功能的声明的逻辑背后的解释
- python - 如何使用openpyxl通过python更改数据连接源
- java - 为什么不显示数据库中的用户?
- dart - 我试图在 dart 中 switch 语句的 case 子句中定义一个范围,但无法正确设置
- javascript - 为什么 Instagram Embed 没有显示在我的 react 应用程序上?