如何从Java Jar访问外部文件

时间:2018-12-13 10:14:32

标签: java jar

我有一个jar正在使用以下代码读取文件:

Thread.currentThread().getContextClassLoader().getResource(fileName);

我想使用java -jar .jar命令运行此jar,但我想将此文件保留在jar之外,以便以后可以编辑jar文件而无需接触jar。谁能帮我,如何运行这个jar,以便它可以从外部获取文件。

2 个答案:

答案 0 :(得分:0)

您可以采用多种方法来执行此操作,这取决于您要将外部文件放置在何处。为了这个答案,我将此文件称为 config文件

不在同一目录中

第一种方法是,您需要将此文件放在JAR外部,而不必放在同一目录中的JAR文件旁边。在这种情况下,您可以使用环境变量(例如,如果您在外壳程序中运行JAR)或Java属性来传递 config文件的文件位置。

要使用环境变量,假设您正在使用某些Linux发行版,则可以使用export命令设置该值;像这样的东西:

$ export CONFIG_FILE_LOC=/etc/myapp/config.file

然后您可以使用System类通过以下代码读取代码中的值:

String fileLocationEnv = System.getenv("CONFIG_FILE_LOC");

或者,您可以通过将以下段添加到启动命令中来将其设置为属性:

$ java -Dconfig.file.location=/etc/myapp/config.file -jar myapp.jar

然后,您可以使用System类通过以下代码读取属性中的值:

String fileLocationProp = System.getProperty("config.file.location");

在同一目录中

如果需要 config文件与JAR文件共存于同一目录中,则可以使用以下代码获取JAR目录,然后将文件名附加到该目录中。这是代码(假设一个名为MyApp的类)

try{
    new File(MyApp.class.getProtectionDomain().getCodeSource().getLocation().toURI());
 } catch(URISyntaxException exception){
    System.out.println("Exception");
 }

希望有帮助。

答案 1 :(得分:0)

要重新打开该文件,请将包含要使用的文件的文件夹添加到类路径中:

java -classpath .;config -jar myjar.jar

此示例将当前目录和config目录添加到您的类路径。

可以使用分隔符指定多个文件夹。在Windows上使用';' ,在Unix上使用':'。

要以文件形式打开文件,只需使用

new File("configfile")

它将在工作目录(启动Java的目录)中查找

相关问题