写入java包中的属性文件

时间:2015-07-29 05:55:24

标签: java properties fileoutputstream

如何使用另一个包中的java类在java包中写入属性文件。

以下是编写属性文件的代码

String filePath1 = "com/...../application.properties";
        File applicationProperties = new File(filePath1);
        FileOutputStream fileOutputStream = new FileOutputStream(applicationProperties);
        Date todayDate = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        properties.setProperty("application.database.backup.date", sdf.format(todayDate));
        properties.store(fileOutputStream, "storing index values to properties file");
        fileOutputStream.close();

获取FileNotFoundException.But文件存在于此包中。阅读这些文件时获取输出。

String filePath = "com/....../application.properties";
        InputStream inputStream = getClass().getResourceAsStream(filePath);
        Properties properties = new Properties();
        properties.load(inputStream);
        if (properties.getProperty("application.grouping.mode") != null || !properties.getProperty("application.grouping.mode").isEmpty()) {

            String lastBackupDate = properties.getProperty("application.grouping.mode");


    }

如何解决此异常。

3 个答案:

答案 0 :(得分:1)

这里有三个相关的问题。基本上,您假设get因为您可以从资源中读取,您可以写入相对于当前目录的相同文件夹结构中的文件。这是一个有缺陷的假设,因为:

  • 资源可能不在文件系统上作为单独的文件开头。例如,Java应用程序通常打包到jar文件中。类加载器知道如何从jar文件中读取资源,但磁盘上没有文件夹结构

  • 即使文件 在磁盘上作为正确文件夹结构中的单独文件,它们也可能不会以进程的工作目录为根。例如:

    # Running in /home/jon/Documents
    $ java -cp /home/jon/java/bin com.foo.bar.SomeApplication
    

此处SomeApplication.class位于/home/jon/java/bin/com/foo/bar,但new File("com/foo/bar/something.properties")会引用/home/jon/Documents/com/foo/bar/something.properties

最后,即使你 试图写到正确的位置,你也可能没有写访问权限 - 通常应用程序的二进制文件存储在只读目录中,合理的理由是应将代码和只读应用程序数据与应用程序的更改状态分开。除了其他任何东西,这使更新/修复变得更加容易 - 只要吹走旧版本的目录,知道你不会丢失任何用户数据。

您的上下文不明确,但我建议您找到一种将文件名传递给应用程序的适当方法,并写入该文件并在需要的地方读取。

答案 1 :(得分:0)

确保您的属性文件位于类路径中。之后你应该能够加载它

String filePath = "/application.properties";
InputStream inputStream = getClass().getResourceAsStream(filePath);

答案 2 :(得分:0)

您的com位于src目录中。因此,您的文件路径必须为src/com/.....。它必须以src/而不是com/

开头