如果为null,则将属性添加到属性文件

时间:2016-08-14 18:34:39

标签: java properties

我正在尝试向config.properties添加一个新属性,如果它不存在的话。有没有办法做到这一点?

我当前的配置类如下所示:

package com.template;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;

public class Config {

    static File folder = new File(System.getProperty("user.home") + "/Documents/Electrocode Productions/template");

    public static void add() {
        if(!folder.exists()) {
            try {
                folder.mkdirs();
            } catch(SecurityException e) {
                Log.error(e);
            }
        }

        Properties config = new Properties();
        OutputStream output = null;
        Path filePath = Paths.get(folder + "/config.properties");    
        if(!(filePath == null)) {
            try {
                output = new FileOutputStream(folder + "/config.properties");

                config.setProperty("log", "true");

                config.store(output, null);
            } catch(IOException e) {
                Log.error(e);
            } finally {
                if(output !=null) {
                    try {
                        output.close();
                    } catch(IOException e) {
                        Log.error(e);
                    }
                }
            }
        }
    }

    public static String get(String value) {
        Properties config = new Properties();
        InputStream input = null;

        try {
            input = new FileInputStream(folder + "/config.properties");

            config.load(input);
        } catch(IOException e) {
            Log.error(e);
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return config.getProperty(value).trim();
    }
}

这是有效的,因为如果你编辑它就不会覆盖文件,但如果删除一个条目,你需要完全删除整个文件以重新添加该条目。

我的最终目标是让您能够关闭程序,编辑配置文件,然后使用新参数重新打开配置文件,但是如果删除参数,它将不会崩溃到程序,因为它依赖于配置文件中的答案。 (我希望这是有道理的。它基本上和大多数视频游戏一样)。

1 个答案:

答案 0 :(得分:0)

在使用之前,您需要验证从属性中获得的值。例如你不能.trim()一个不在这里的价值。

public class Config {

    static final File folder = new File(System.getProperty("user.home") + "/Documents/Electrocode Productions/template");
    static final File file = new File(folder, "config.properties");

    public static void add() throws IOException {
        if (file.exists())
            return;

        // create directories as needed.
        folder.mkdirs();

        Properties config = new Properties();
        config.setProperty("log", "true");

        try (OutputStream out = new FileOutputStream(file)) {
            config.store(out, null);
        }
    }

    public static String get(String key, String defaultValue) {
        if (!file.exists())
            return defaultValue;

        try (InputStream in = new FileInputStream(file)) {
            Properties config = new Properties();

            config.load(input);
        } catch(IOException e) {
            Log.error(e);
            return defaultValue;
        }

        String value = config.getProperty(key);
        if (value == null)
            return defaultValue;
        value = value.trim();
        if (value.isEmpty())
            return defaultValue;
        return value;
    }
}