【发布时间】:2011-01-11 18:42:59
【问题描述】:
我们有一个独立的 java swing 应用程序,用户可以在其中通过提供其 IP 在打印机上打印他绘制的东西。
现在的要求是应用需要记住该用户最后一次提供的 ip。
到目前为止,我能想到的是(虽然很粗鲁)- 在客户端计算机上保留一种日志文件类型的存储,并且每次应用程序启动时它都会读取最后提交的文件。
任何建议都会有所帮助。
提前致谢。
【问题讨论】:
我们有一个独立的 java swing 应用程序,用户可以在其中通过提供其 IP 在打印机上打印他绘制的东西。
现在的要求是应用需要记住该用户最后一次提供的 ip。
到目前为止,我能想到的是(虽然很粗鲁)- 在客户端计算机上保留一种日志文件类型的存储,并且每次应用程序启动时它都会读取最后提交的文件。
任何建议都会有所帮助。
提前致谢。
【问题讨论】:
这里有一个使用 Java Preferences API 来实现你想要的东西的教程。 来自文章:
Java Preferences API 提供了一个 系统地处理用户和 系统偏好和配置 数据,例如保存用户设置, 记住字段的最后一个值 等等
我会使用这种方法而不是将任何数据显式写入文件,因为它与平台无关。
【讨论】:
差不多就是这样。您仍然可以查看 jEdit 的 HistoryTextField 组件的源代码。 http://www.jedit.org/api/org/gjt/sp/jedit/gui/HistoryTextField.html
来自 jEdit 源的示例:
public boolean save(Map<String, HistoryModel> models)
{
Log.log(Log.MESSAGE,HistoryModel.class,"Saving history");
File file1 = new File(MiscUtilities.constructPath(
jEdit.getSettingsDirectory(), "#history#save#"));
File file2 = new File(MiscUtilities.constructPath(
jEdit.getSettingsDirectory(), "history"));
if(file2.exists() && file2.lastModified() != historyModTime)
{
Log.log(Log.WARNING,HistoryModel.class,file2
+ " changed on disk; will not save history");
return false;
}
jEdit.backupSettingsFile(file2);
String lineSep = System.getProperty("line.separator");
BufferedWriter out = null;
try
{
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file1), "UTF-8"));
if(models != null)
{
Collection<HistoryModel> values = models.values();
for (HistoryModel model : values)
{
if(model.getSize() == 0)
continue;
out.write('[');
out.write(StandardUtilities.charsToEscapes(
model.getName(),TO_ESCAPE));
out.write(']');
out.write(lineSep);
for(int i = 0; i < model.getSize(); i++)
{
out.write(StandardUtilities.charsToEscapes(
model.getItem(i),
TO_ESCAPE));
out.write(lineSep);
}
}
}
out.close();
/* to avoid data loss, only do this if the above
* completed successfully */
file2.delete();
file1.renameTo(file2);
}
catch(IOException io)
{
Log.log(Log.ERROR,HistoryModel.class,io);
}
finally
{
IOUtilities.closeQuietly(out);
}
historyModTime = file2.lastModified();
return true;
}
【讨论】:
由于它是一个 Swing 应用程序。您可以使用 Java Web Start 启动它,然后使用 PersistenceService 持久化数据。这是demo. of the PersistenceService。
【讨论】:
我真的不推荐这个,但你也可以使用注册表。
【讨论】: