2013-12-09 64 views
0

我有一些基本类,存储数据:序列化对象到一个文件

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

但这种代码是行不通的。没有发生任何错误或异常,但它不会在指定的文件夹中创建文件。我的错误是什么?

+0

为了更好地帮助越早,张贴[SSCCE(http://sscce.org/)。 –

+2

String this.data =“”; ?? –

+0

请显示最后一部分的完整代码;你必须在某处处理'IOException',但我没有看到它,并且我怀疑你正在吞咽正在抛出的异常(可能'文件夹'不存在)。另外,在'saveItemToFile'调用之前调试并检查'folder'的值,并检查传递给'new FileOutputStream'的值。 – chrylis

回答

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

此代码完美作品,可能是您寻找生成文件的错误文件夹。唯一的一点是它附带.CDDB以及文件名。如果您无法找到user.home文件夹,请在下面的行中添加以打印对象隔离对象的位置。

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

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

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