13

次のクラスをシリアル化しようとしています。

public class Library extends ArrayList<Book> implements Serializable{

public Library(){
    check();
}

そのクラスの次のメソッドを使用します。

void save() throws IOException {
    String path = System.getProperty("user.home");
    File f = new File(path + "\\Documents\\CardCat\\library.ser");    

    ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream (f));  
    oos.writeObject(this);
    oos.close();
}

ただし、library.serプログラムは というファイルを作成するのではなく、名前library.serのないディレクトリを作成しています。どうしてこれなの?

役立つ場合は、save() メソッドが最初にこのメソッド (同じクラスの) から呼び出されます。

void checkFile() {
    String path = System.getProperty("user.home");
    File f = new File(path + "\\Documents\\CardCat\\library.ser");    

    try {    
         if (f.exists()){
             load(f);
         }
         else if (!f.exists()){
             f.mkdirs();
             save();
         }
    } catch (IOException | ClassNotFoundException ex) {
         Logger.getLogger(Library.class.getName()).log(Level.SEVERE, null, ex);
    }
}
4

2 に答える 2

35

ファイルの代わりにディレクトリを作成する File.mkdirs()

それが本来の役割です。Javadoc を読んでください。ファイルの作成については何もありません。

f.mkdirs();

ディレクトリを作成するのはこの行です。そのはず

f.getParentFile().mkdirs();
于 2013-03-04T23:08:10.593 に答える
2

f.mkdirs()への呼び出しがあなたの問題であると確信しています。ファイルがまだ存在しない場合 (これはあなたのケースのようです)、f.mkdirs()呼び出しはファイルの代わりに「library.ser」というディレクトリを提供します。これが、「save()」呼び出しが機能しない理由です-オブジェクトをディレクトリにシリアル化することはできません。

于 2013-03-04T23:08:28.983 に答える