如何在文件中保存变量?

时间:2013-07-07 19:32:41

标签: java arrays io persistence

有没有办法可以保存变量,例如颜色数组,然后检索它。我正在制作棋盘游戏,我需要能够在任何给定的时间保存。如果它不能那样工作,可以给我任何其他建议,我可以使用什么?

3 个答案:

答案 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();
}