【问题标题】:Writing to properties file from .jar executable从 .jar 可执行文件写入属性文件
【发布时间】:2026-02-17 19:10:01
【问题描述】:

我在通过 .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 时创建“输出”时,它仅在本地创建,并且它没有为我提供对适当文件的访问权限,但我可能错了。我获得了这种访问权限,当我通过 .getResourceAsStream() 创建“in”时,我可以处理这个现有文件,但不知道如何以类似的方式创建“输出”,并且能够将数据存储在现有文件中项目。 我通过“导出 -> 可运行的 JAR 文件”在 eclipse 中创建 .jar 并通过双击运行它。

【问题讨论】:

  • 您没有提供足够的信息。你得到什么?你想要什么?你如何创建这个罐子?你如何运行它?我们无法猜测。
  • 当它作为 jar 在不同位置运行时,文件夹“src/application”可能不存在。你有错误吗?
  • 我没有收到任何错误。
  • 当您从 .jar 文件运行时,您的开发项目不可见并且实际上不存在。将 .jar 文件中的 data.properties 作为 prototype 用于存储在用户主目录下某处的全新 data.properties。见*.com/documentation/java/2433/…*.com/questions/35388882/…

标签: java eclipse jar properties executable


【解决方案1】:
  1. 我会冒险猜测:getResourceAsStream 正在返回一个 Stream 读取 JAR 内部 的属性文件,而 FileOutputStream 正在处理一个文件 外部 JAR - JAR 中的属性永远不会改变!

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

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

  3. 保存清晰的密码(文件或数据库)是潜在的安全威胁...

【讨论】: