写入属性文件

时间:2019-06-15 12:58:28

标签: java

试图将值写入属性文件中的参数。 config.properties文件已经在/ src / config文件夹下创建,我可以读取它。它只有一个参数“状态”。但是,当我尝试更新/写入属性文件时,出现以下错误: java.io.FileNotFoundException:\ src \ config \ config.properties(系统找不到指定的路径)

Properties prop = new Properties();
    prop.setProperty("status","1");
        try {
            prop.store(new FileOutputStream("/src/config/config.properties"), null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

2 个答案:

答案 0 :(得分:3)

问题出在这里

    is=this.getClass().getResourceAsStream("/config/config.properties");

这不是正常的文件系统读取。它使用相对于类路径中目录或JAR文件的相对路径从类路径读取资源。该路径是资源路径,而不是文件系统路径。

如果要写入该文件:

  1. 它必须是独立文件,而不是JAR或ZIP文件条目或类似的文件。

  2. 它不能为只读...或锁定。

  3. 您需要知道与资源路径相对应的 actual 绝对或相对文件系统路径名。 (因为资源API方法没有提供打开用于编写资源的方法。)

相反,当您打开文件进行写入时,尝试使用资源路径来标识文件。 (FileOutputStream类需要文件系统路径。)


基本上,您将不得不重新设计它。更新资源路径上的内容通常很困难,有时甚至是不可能的。另外,您似乎在/src/...位置引用资源,在部署应用程序时该资源不会位于类路径中。 (我假设您不会期望您的用户下载,安装并学习使用 Java IDE,以便他们可以运行您的应用程序!)

一个更好的主意是将属性文件放入应用程序的安装目录或用户的主目录中。然后,您找出一种方法让应用程序找出该位置。 (例如,如果您使用包装器脚本启动应用程序,则该脚本可以使用-D选项将安装目录路径传递给您的应用程序。

另一种替代方法是使用Java设置API,该API可以将设置存储在文件系统中(特定于平台的)标准位置。

答案 1 :(得分:0)

我需要配置构建系统,您使用gradle,maven,ant?什么都没有?

因为您的代码无法在jar中工作,因为src目录不存在于jar中。

使用您的信息,我说的是使用绝对路径来解决问题,但是很糟糕,因为您耦合了文件系统结构。

要使用绝对路径,请查看此post,但希望您在文章中为您的项目添加更多信息。

prop.store(new FileOutputStream(System.getProperty("user.dir") + "/src/config/config.properties"), null);

我查看了一条评论,您用this.getClass().getResourceAsStream()读取了专有文件,其路径分辨率为FileOutputStream

要解决该问题,我们将需要有关项目结构的更多信息,请修改您的问题,因为使用绝对路径作为我的解决方案是通用的