有没有办法可以保存变量,例如颜色数组,然后检索它。我正在制作棋盘游戏,我需要能够在任何给定的时间保存。如果它不能那样工作,可以给我任何其他建议,我可以使用什么?
答案 0 :(得分:2)
您可以使用ObjectOutputStream
编写实现Serializable
接口的对象。
FileOutputStream fos = new FileOutputStream("my.save");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(colorsArray);
当然,也可以采用相同的方式加载:
FileInputStream fis = new FileInputStream("my.save");
ObjectInputStream ois = new ObjectInputStream(fis);
colorsArray = (Color[]) ois.readObject();
答案 1 :(得分:2)
查看XML序列化实用程序。如果你的“变量”是一个类实例(或包含在一个实例中),这应该使得保存这些值变得非常简单。
如果不是,你将不得不找出一种方法来写出变量的值,并从字符串中解析回来,以便你可以将它保存到文本文件中。
答案 2 :(得分:1)
有多种方法可以序列化数据。这是一个(从我打开的一个小项目中解除),使用ArrayList
作为数据容器,XMLEncoder
/ XMLDecoder
进行序列化,并将它们放在Zip中以便进行测量。 / p>
public void loadComments() throws FileNotFoundException, IOException {
File f = getPropertiesFile();
FileInputStream fis = new FileInputStream(f);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry entry = zis.getNextEntry();
while (!entry.getName().equals(COMMENTS_ENTRY_NAME)) {
entry = zis.getNextEntry();
}
InputSource is = new InputSource(zis);
XMLDecoder xmld = new XMLDecoder(is);
comments = (ArrayList<Comment>) xmld.readObject();
try {
fis.close();
} catch (IOException ex) {
Logger.getLogger(CommentAssistant.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void saveComments() throws FileNotFoundException, IOException {
CommentComparator commentComparator = new CommentComparator();
Collections.sort(comments, commentComparator);
File f = getPropertiesFile();
System.out.println("Save to: " + f.getAbsolutePath());
File p = f.getParentFile();
if (!p.exists() && !p.mkdirs()) {
throw new UnsupportedOperationException(
"Could not create settings directory: "
+ p.getAbsolutePath());
}
FileOutputStream fos = new FileOutputStream(f);
ZipOutputStream zos = new ZipOutputStream(fos);
ZipEntry entry = new ZipEntry(COMMENTS_ENTRY_NAME);
zos.putNextEntry(entry);
XMLEncoder xmld = new XMLEncoder(zos);
xmld.writeObject(comments);
xmld.flush();
xmld.close();
}