我有一个 Java 程序,应该在退出时保存 Preference 中存储的值,但是当我使用 Preferences 类导出和导入节点的存储键/值时,保存可以工作,但加载失败,NotePad++ 显示包含非 xml 字符在文件的开头(见图)。下面是最小的代码。我很确定我只是在做/错过一些愚蠢的事情,但我似乎找不到它。 下面的最小代码:
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);
}
}
您正在向
ObjectOutputStream
写入数据,但直接从 FileInputStream
中读取数据。尝试摆脱 ObjectOutputStream
并直接写信给您的 FileOutputStream
。