Jar和File I / O.

时间:2011-01-29 13:58:38

标签: java properties jar io

在我的Java项目中,我在文件夹src / properties中有一些属性文件。在eclipse加载中运行应用程序并使用以下代码保存文件时没有问题:

    // create and load default properties
    Properties defaultProps = new Properties();
    File file = new File("src/properties/defaultProperties");
    if (!file.exists()){
        // Create new properties file
            ...
        FileOutputStream out = new FileOutputStream("defaultProperties");
        defaultProps.store(out, "---No Comment---");
        out.close();
    } else {
        // Load existing properties file
        FileInputStream in = new FileInputStream(file);
        defaultProps.load(in);
        in.close();
    }

然而,当我使用eclipse创建一个Runnable Jar文件时,属性无法正确加载。保存文件时也会发生同样的情况。我读了一些关于:

的文章
InputStream is = getClass().getResourceAsStream(path);

但在这种情况下,如果文件存在,如何检查输入流?如何以正确的方式执行此I / O以使其在可执行的Jar文件中工作?

4 个答案:

答案 0 :(得分:3)

而是使用java.util.prefs.Preferences。它与java.util.Properties类似,区别在于它不存储在属性文件中,而是存储在特定于平台的配置管理中。例如,在Windows机器上,这是注册表。

另见:

答案 1 :(得分:0)

getClass().getResourceAsStream(path);

是正确的方法。您的属性文件需要打包在jar文件中,并且路径(如上所用)应与 jar文件中的属性文件路径匹配。

请注意,您不会写入此内容。如果你正在打包一个罐子,那么(就所有意图和目的而言)都是不可变的。

答案 2 :(得分:0)

来自ClassLoader的javadoc

getResourceAsStream返回

  

用于读取资源的输入流,如果找不到资源,则为null

答案 3 :(得分:0)

不要尝试将资源写回Jar文件。档案通常由JVM锁定。

而是将新选项序列化到本地文件系统上的某个位置(有许多选项可用于实现此目的)并在默认为内部属性之前检查该更改的文件。