我在通过.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文件"并通过双击运行它。
答案 0 :(得分:1)
我冒昧地猜测:getResourceAsStream
正在返回一条Stream,读取属性文件里面 JAR,而FileOutputStream
正在寻找文件在外面 JAR - JAR中的属性永远不会改变!
覆盖(正在运行)JAR中的文件并非易事!必须为此重新创建Jar。可能更好的只能从外部文件写入/读取,即使用FileInputStream
而不是getResourceAsStream
。访问“src”目录中的文件也有点奇怪,因为这通常不包含在已部署的系统/代码中。
使用FileOutputStream(..., true)
将数据附加到文件末尾 - 它不会覆盖现有用户的数据。不确定这是否是一个问题,或者是否只为新用户调用此代码?!
保存明确的密码(文件或数据库)是一种潜在的安全威胁......