gpt4 book ai didi

Java XML 序列化,文件中缺少字段

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:50 26 4
gpt4 key购买 nike

这是手头的问题,当尝试使用下面的代码序列化下面的类时,我得到的是下面的 xml 文件,没有类中的所有字符串。

类(一些静态值已经改变但基本上是这样),我省略了所有生成的 get\set 但它们都带有公共(public)访问修饰符。

public class NotificationConfiguration implements Serializable
{
public static final String PORT_KEY = "mail.smtp.port";
public static final String DEFAULT_PORT_VALUE = "587";
public static final String TTL_KEY = "mail.smtp.starttls.enable";
public static final String DEFAULT_TTL_VALUE = "true";
public static final String AUTH_KEY = "mail.smtp.auth";
public static final String DEFAULT_AUTH_VALUE = "true";
public static final String MAIL_SERVER_KEY = "mail.smtp.host";
public static final String DEFAULT_MAIL_CLIENT_HOST = "smtp.gmail.com";
public static final String DEFAULT_MAIL_CLIENT_USERNAME = "*********";
public static final String DEFAULT_MAIL_CLIENT_PASSWORD = "*********";
public static final String DEFAULT_MAIL_CLIENT_ADDRESS = "*********";
public static final String DEFAULT_ADMIN_EMAIL = "*********";
public static final long DEFAULT_MAIL_INTERVAL = 24*60*60*1000; //One time a day default
public static final String SAVED_FOLDER_NAME = "C:\\Library";
public static final String SAVED_FILE_NAME = "C:\\Library\\NotificationCfg.xml";

private String portValue = DEFAULT_PORT_VALUE;
private String ttlValue = DEFAULT_TTL_VALUE;
private String authValue = DEFAULT_AUTH_VALUE;
private String mailClientHost = DEFAULT_MAIL_CLIENT_HOST;
private String mailClientUserName = DEFAULT_MAIL_CLIENT_USERNAME;
private String mailClientPassword = DEFAULT_MAIL_CLIENT_PASSWORD;
private String mailClientAddress = DEFAULT_MAIL_CLIENT_ADDRESS;
private String adminEMail = DEFAULT_ADMIN_EMAIL;
private boolean overdueSubsNotificationEnabled = false;
private boolean adminReportNotificationEnabled = false;
private long mailInterval =
}

用于序列化的代码,如果丢失也会创建文件夹。

public void storeChanges()
{
try
{
try
{
File f = new File(NotificationConfiguration.SAVED_FOLDER_NAME);
f.mkdir();
}
catch (Exception e){}
XMLEncoder encoder = new XMLEncoder( new BufferedOutputStream(new FileOutputStream(NotificationConfiguration.SAVED_FILE_NAME)));
encoder.writeObject(notificationConfig);
encoder.close();
System.out.println(LOG_CONFIGURATION_STORED);
}
catch (Exception ex)
{
System.out.println(LOG_CONFIGURATION_NOT_STORED + ex.getMessage());
}
}

收到的 XML 文件,在序列化时没有抛出异常。它基本上只有长值。

最佳答案

XMLEncoder 对有关如何恢复对象的信息进行编码。如果字段值未更改其默认值,则 XMLEncoder 不存储任何内容。

这可能会造成混淆。

因此,我在使用 XMLEncoder 时的经验法则是:
1.不要初始化字段。不要做 private String foo = DEFAULT_FOO;
2. 不要在默认构造函数中做任何事情。
3. 如果需要,有一些其他方法或工厂会为您提供“默认”设置。

关于Java XML 序列化,文件中缺少字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com