将对象序列化为文件

时间:2013-12-09 16:00:54

标签: java file serialization

我有一些存储数据的基本类:

class Item implements java.io.Serializable {
    String this.data = "";
    public void saveData(String data) {
        this.data = data;
    }
    public String getData() {
        return this.data;
    }
}

另一个类中的一个函数,它应该将Item实例保存到文件中:

    private static void saveItemToFile(File folder, Item item) throws IOException{
    FileOutputStream fos = new FileOutputStream(
            folder.getAbsolutePath() + item.getData() + ".obj");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(item);
    oos.close();
}

测试代码:

Item itm = new Item();
itm.saveData("String data here");
File folder = new File(System.getProperty("user.home") + "/.CDDB");
saveItemToFile(folder, itm);

但是这段代码不起作用。没有引发任何错误或异常,但它只是不在指定的文件夹中创建文件。我的错是什么?

3 个答案:

答案 0 :(得分:2)

通过将文件名添加到没有路径分隔符的目录路径来构建目标路径:

folder.getAbsolutePath() + item.getName() + ".obj"

所以你应该有一个名为[USER_HOME]/.CDDB[item name].obj

的文件

更好地直接使用File个对象:

private static void saveItemToFile(File folder, Item item) throws IOException {
    File file = new File(folder, item.getName() + ".obj");
    try (ObjectOutputStream oos =
            new ObjectOutputStream(new FileOutputStream(file))) {
        oos.writeObject(item);
    }
}

答案 1 :(得分:0)

此代码完美无缺,可能是您为生成的文件寻找错误的文件夹。唯一的事情是它附加.CDDB和文件名。如果您无法找到user.home文件夹,请添加以下行以打印对象serailiaze对象的位置。

System.out.println("--- output path "+System.getProperty("user.home"));

否则使用参数File创建System.getProperty("user.home") + "/.CDDB"对象并传递给OutputStream

答案 2 :(得分:0)

我编写了一个运行你的程序,这就是我观察到的:

创建了一个名为.CDDBString data here.obj

的文件

我认为您打算使用名为String data here.obj的文件,但在saveItemToFile中,您将文件夹和文件名连接在一起以获取文件名,而不使用路径分隔符。

这应该可以解决问题:

private static void saveItemToFile(File folder, Item item) throws IOException{
  File out = new File(folder, item.getData() + ".obj");
  FileOutputStream fos = new FileOutputStream(out);
  ObjectOutputStream oos = new ObjectOutputStream(fos);
  oos.writeObject(item);
  oos.close();
}