Java 将对象序列化为文件

Java 将对象序列化为文件,java,file,serialization,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; } } 另一个类中的函数,用于将项实例保存到文件中:

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

class Item implements java.io.Serializable {
    String this.data = "";
    public void saveData(String data) {
        this.data = data;
    }
    public String getData() {
        return this.data;
    }
}
另一个类中的函数,用于将项实例保存到文件中:

    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);

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

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

folder.getAbsolutePath() + item.getName() + ".obj"
因此,您应该有一个名为
[USER\u HOME]/.CDDB[item name].obj的文件

最好直接使用
文件
对象:

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);
    }
}

这段代码工作得非常好,可能是您在为生成的文件寻找错误的文件夹。唯一的问题是它附加了
.CDDB
和文件名。如果您找不到user.home文件夹,请在下面的行中添加以打印对象在何处序列化对象

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

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

我已经编译了一个文件,并运行了您的程序,这就是我观察到的:

创建的文件名为
.CDDBString data here.obj

我想您打算在这里创建一个名为
String data.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();
}

为了更快地获得更好的帮助,请发布一个.String this.data=“”??请在最后一部分显示您的完整代码;您必须在某个地方处理
IOException
,但我看不到它,我怀疑您正在接受正在抛出的异常(很可能
文件夹
不存在)。另外,在调用
saveItemToFile
之前调试并检查
文件夹的值,并检查传递给
newfileoutputstream
的值。