从.jar可执行文件写入属性文件

时间:2017-05-24 12:38:18

标签: java eclipse jar properties executable

我在通过.jar文件写入属性文件时遇到问题。 我的输出'仅适用于Eclipse,但不知道如何更改它并使其在可执行文件.jar中工作。

        FileOutputStream output = new FileOutputStream("src/application/data.properties",true);
        InputStream in = Login.class.getResourceAsStream("data.properties");
        properties.load(in);

        properties.setProperty(username+"Username", username);
        properties.setProperty(username+"Password", password);
        properties.store(output, formattedDate);

修改

我没有错误。我想存储这个用户名'和密码'在data.properties文件中,它包含在项目中。当我在Eclipse中运行它时,它可以工作。当我通过.jar文件运行它时,它不会将这些数据写入属性文件。我认为,这是因为当它产生'输出'在运行jar时,它只在本地创建,并没有为我提供对相应文件的访问权限,但我可能错了。我获得此访问权限,当我创建' in'时,我可以处理此现有文件。通过.getResourceAsStream(),但不知道如何创建'输出'以类似的方式,并能够将数据存储在项目中已有的文件中。 我通过"导出 - >在eclipse中创建.jar。可运行的JAR文件"并通过双击运行它。

1 个答案:

答案 0 :(得分:1)

  1. 我冒昧地猜测:getResourceAsStream正在返回一条Stream,读取属性文件里面 JAR,而FileOutputStream正在寻找文件在外面 JAR - JAR中的属性永远不会改变!

    覆盖(正在运行)JAR中的文件并非易事!必须为此重新创建Jar。可能更好的只能从外部文件写入/读取,即使用FileInputStream而不是getResourceAsStream。访问“src”目录中的文件也有点奇怪,因为这通常不包含在已部署的系统/代码中。

  2. 使用FileOutputStream(..., true)将数据附加到文件末尾 - 它不会覆盖现有用户的数据。不确定这是否是一个问题,或者是否只为新用户调用此代码?!

  3. 保存明确的密码(文件或数据库)是一种潜在的安全威胁......