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
的值。