我创建了一个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的位置是我无法控制的,因此编写静态路径将不起作用。请帮忙!
答案 0 :(得分:2)
有很多方法,我会告诉你两个。
您需要一个指向 main.properties 文件的File
对象。然后,您就可以使用new FileInputStream(File)
在此对象String
上创建一个流。
问题当然是获取 main.properties.txt 的相对路径,该路径适用于所有系统,无论jar
- 文件位于何处。
在这种情况下, main.properties.txt 位于用户桌面。您可以通过以下方式访问它:
File desktop = new File(System.getProperty("user.home"), "Desktop");
File target = new File(desktop, "main.properties.txt");
Alernativly,如果您计划分发不需要用户互动的配置和属性文件,您可能需要使用Temp
或Documents
( Windows )等位置。
可能是您最好的选择之一。假设目标与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");