Java - 属性文件中的设置值正在覆盖以前的值

Java - Setting Value in Properties File is Overwritting Previous Values

我有一个 class 管理所有设置的方法:

public class SettingsManager {

    public String settingsFileName = Start.programName + ".settings";

    public SettingsManager(String settingsFileName) {
        this.settingsFileName = settingsFileName;
    }

    public void saveIntoNewSettings(String nameOfSetting, String settingValue) {
        Properties programProperties = new Properties();
        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(this.settingsFileName);
            programProperties.setProperty(nameOfSetting, settingValue);
            programProperties.store(outputStream, null);
            outputStream.close();
        }
        catch (Exception errorException) {
            Common.errorEncountered(errorException, "An error occured while trying to save a setting into the file " + this.settingsFileName + ".");
        }
    }

    public void saveSetting(String nameOfSetting, String settingValue) {
        try {
            InputStream inputStream = new FileInputStream(this.settingsFileName);
            OutputStream outputStream = new FileOutputStream(this.settingsFileName);
            Properties programProperties = new Properties();
            programProperties.load(inputStream);
            inputStream.close();
            programProperties.setProperty(nameOfSetting, settingValue);
            programProperties.store(outputStream, null);
            outputStream.close();
        }
        catch (Exception errorException) {
            Common.errorEncountered(errorException, "An error occured while trying to load a setting from the file " + this.settingsFileName + ".");
        }
    }

    public String loadSetting(String nameOfSetting) {
        Properties programProperties = new Properties();
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(this.settingsFileName);
            programProperties.load(inputStream);
            inputStream.close();
            return programProperties.getProperty(nameOfSetting);
        }
        catch (Exception errorException) {
            Common.errorEncountered(errorException, "An error occured while trying to load a setting from the file " + this.settingsFileName + ".");
        }
        return "";
    }

    public boolean settingsFileExists() {
        File settingsFile = new File(settingsFileName);
        if (settingsFile.exists() && !settingsFile.isDirectory()) {
            return true;
        }
        else {
            return false;
        }
    }
}

在创建了一个名为 "mainSettings" 的 class 实例后,我 运行 在我的主 class:

中添加了这两行代码
mainSettings.saveSetting("hello1", "world1");
mainSettings.saveSetting("hello2", "world2");

在我的设置文件中,我看到的是:

hello2=world2

出于某种原因,每次我调用 saveSetting 方法时,它都会删除设置文件中的旧值。我认为当我调用“programProperties.load(inputStream);”时应该保存这些值。

当您创建 OutputStream 时,文件被截断为 0 字节。感染你没有任何属性读取。试试这个:

public void saveSetting(String nameOfSetting, String settingValue) {
    try {
        InputStream inputStream = new FileInputStream(this.settingsFileName);
        Properties programProperties = new Properties();
        programProperties.load(inputStream);
        inputStream.close();
        OutputStream outputStream = new FileOutputStream(this.settingsFileName);
        programProperties.setProperty(nameOfSetting, settingValue);
        programProperties.store(outputStream, null);
        outputStream.close();
    }
    catch (Exception errorException) {
        Common.errorEncountered(errorException, "An error occured while trying to load a setting from the file " + this.settingsFileName + ".");
    }
}

应该可以解决您的问题。