任何人都可以弄清楚为什么 Java 的 Preferences.exportNode() 导出非 XML 字符吗?

问题描述 投票:0回答:1

我有一个 Java 程序,应该在退出时保存 Preference 中存储的值,但是当我使用 Preferences 类导出和导入节点的存储键/值时,保存可以工作,但加载失败,NotePad++ 显示包含非 xml 字符在文件的开头(见图)。下面是最小的代码。我很确定我只是在做/错过一些愚蠢的事情,但我似乎找不到它。 output image 下面的最小代码:

public class Test{
  java.util.prefs.Preferences userPref;
    public Test() {}
    public void run(){
            userPref = java.util.prefs.Preferences.userNodeForPackage(getClass());
            save();
            load();
    }
    public boolean save(){
        FileOutputStream fileOutputStream = null;
        try {
            File file = new File("Test.xml");                      //
            fileOutputStream = new FileOutputStream(file);
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            userPref.exportNode(objectOutputStream);
            objectOutputStream.close();
            fileOutputStream.close();
            return true;    
        } catch (IOException | BackingStoreException ex) {
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException ex) {}
        }
        return false;
    }
    public boolean load(){
        try {
            File file = new File("Test.xml");
            if(!file.exists()) return false;
            Preferences.importPreferences(new FileInputStream(file)); // Error occurs here at the line Document doc = loadPrefsDoc(is);
        } catch (IOException ex) {
            return false;
        } catch (InvalidPreferencesFormatException ex) {
            return false;
        }
        return false;
    }
    public static void main(String args[]) {
        Test test = new Test();
        test.run();
        System.exit(0);
    }
}
java xml preferences
1个回答
0
投票

您正在向

ObjectOutputStream
写入数据,但直接从
FileInputStream
中读取数据。尝试摆脱
ObjectOutputStream
并直接写信给您的
FileOutputStream

© www.soinside.com 2019 - 2024. All rights reserved.