传递.JAR程序(从终端运行)作为输入的文本文件

时间:2016-06-30 19:21:10

标签: java jar terminal directory

我创建了一个java程序,其他测试人员将使用它来帮助他们进行测试。我将向他们发送一个包含.jar,readme.txt和main.properties.txt文件的zip文件。

main.properties.txt文件是测试人员输入其数据库访问凭据的模板。他们将使用db cred更新main.properties文件,然后尝试从终​​端或命令行运行.jar。我遇到的问题是这个。我的程序需要这个更新的main.properties.txt文件,以便它可以创建与我们的数据库的连接。

我需要在自述文件中提供哪些说明,以便我的程序能够成功找到main.properties.txt? main.properties是否需要与.jar位于同一目录中?测试人员可以在他们的桌面或文档文件夹上创建一个文件来放置.jar和main.props吗?

我的另一个问题是,如果从终端运行该文件,我该如何将其传递给我的程序?目前它非常简单,因为main.props是我程序的一部分,我可以做类似

的事情
Properties prop = new Properties();
FileInputStream in = new FileInputStream("src/main/resources/main.properties");
prop.load(in);
in.close();

但是现在main.properties不再是项目的一部分了。我不知道如何更改上面的代码,以便它可以从本地目录中找到文本。他们希望放置他们的main.properties的位置是我无法控制的,因此编写静态路径将不起作用。请帮忙!

1 个答案:

答案 0 :(得分:2)

有很多方法,我会告诉你两个。

您需要一个指向 main.properties 文件的File对象。然后,您就可以使用new FileInputStream(File)在此对象String上创建一个流。

问题当然是获取 main.properties.txt 的相对路径,该路径适用于所有系统,无论jar - 文件位于何处。

1。桌面

在这种情况下, main.properties.txt 位于用户桌面。您可以通过以下方式访问它:

File desktop = new File(System.getProperty("user.home"), "Desktop");
File target = new File(desktop, "main.properties.txt");

Alernativly,如果您计划分发不需要用户互动的配置和属性文件,您可能需要使用TempDocuments Windows )等位置。

2。相对于jar

可能是您最好的选择之一。假设目标与jar - 文件位于同一文件夹中(或至少在相对于jar的修复结构中)。以下是您访问它的方式(相关问题:how-to-get-the-path-of-a-running-jar-file):

CodeSource codeSource = YourMainClass.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
File jarDir = jarFile.getParentFile();

File target = new File(jarDir, "main.properties.txt");