java命令行参数使jar在两个目录中查找文件?

时间:2013-01-29 16:46:59

标签: java

我有一个jar文件,我没有源代码但想要使用。

jar文件提示读取文件,并使用输入文件的组合和一些用于数据的“帮助”文件生成输出文件。如果从预期的主目录运行它,它的工作非常好,但我正在尝试编写一个允许从任何地方运行jar的脚本。

问题是,如果我尝试从其他任何地方运行jar文件,那么它的主目录就无法找到正确生成数据所需的支持文件。

如果我从预期的主目录运行该文件,我必须提供输入文件的完整地址,否则它将无法找到它。我更愿意只给出相对路径,Java知道查看调用我脚本的人所在的目录。

有没有办法让bash脚本将命令行参数传递给Java,以确保此jar查看两个相关目录(帮助程序文件的目录和调用脚本的人的当前目录)在尝试解析相对文件路径时?像-classpath参数那样的东西?

2 个答案:

答案 0 :(得分:0)

使用--classpath(或-cp),您可以告诉您的Java程序应该在何处使用依赖项类。所以,可能如果您喜欢 files目录

$JAVA_HOME/bin/java -cp '.:/path/to/the/original/program' My.class myfile.txt
然后它会关闭程序,并找到你的文件。

<强>更新

如果它不起作用,您可以尝试以其他方式强制加载文件。 Javadoc说:

  

默认情况下,java.io包中的类始终为   解析当前用户目录的相对路径名。这个   目录由系统属性user.dir命名,并且   通常是Java虚拟机所在的目录   调用

因此,您可以尝试以这种方式从原始目录运行程序

$JAVA_HOME/bin/java -Duser.dir=/path/to/the/files/directory My.class myfile.txt

<强> UPDATE2

正如我在评论中所写,您可以尝试symlinks。在原始目录中执行以下命令

ln -s /path/to/the/files/directory datafiles

$JAVA_HOME/bin/java My.class datafiles/myfile.txt

答案 1 :(得分:-1)

抱歉 - 忽略。我错过了你问题的第一行。


您可以将两个路径作为参数传递给jar文件 - 然后在运行时附加路径位置。有很多方法可以做到这一点:

java -DdirectoryA="/somewhere" -DdirectoryB="/elsewhere" -jar program.jar 

并在您的代码中

String pathA = System.getProperty("directoryA");