我有一个jar正在使用以下代码读取文件:
Thread.currentThread().getContextClassLoader().getResource(fileName);
我想使用java -jar .jar命令运行此jar,但我想将此文件保留在jar之外,以便以后可以编辑jar文件而无需接触jar。谁能帮我,如何运行这个jar,以便它可以从外部获取文件。
答案 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的目录)中查找