我有一些存储数据的基本类:
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);
但是这段代码不起作用。没有引发任何错误或异常,但它只是不在指定的文件夹中创建文件。我的错是什么?
答案 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();
}