2013-03-04 7 views
9

Ich versuche zu schaffen bin die folgende Klasse serialisiert werden:File.mkdirs() ein Verzeichnis anstelle einer Datei

public class Library extends ArrayList<Book> implements Serializable{ 

public Library(){ 
    check(); 
} 

die folgende Methode dieser Klasse mit:

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

Doch anstatt Erstellen einer Datei namens library.ser, erstellt das Programm ein Verzeichnis mit dem Namen library.ser mit nichts darin. Warum ist das?

Wenn sein hilfreich, die save() Methode wird zunächst von dieser Methode (der gleichen Klasse) genannt:

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

Antwort

21

File.mkdirs() ein Verzeichnis anstelle einer Datei

Schaffung

Das ist, was es tun soll. Lies den Javadoc. Nichts über das Erstellen einer Datei.

f.mkdirs();

Es ist diese Zeile, die das Verzeichnis erstellt. Es sollte

f.getParentFile().mkdirs(); 
+1

Und auch 'f.createNewFile()', um die Datei zu erstellen, die nicht existiert. – ddmps

+1

@Pescis Das ist völlig unnötig. 'new FileOutputStream()' wird das trotzdem tun. – EJP

+0

Du hast recht, die 'FileNotFoundException' hat mich verwirrt. – ddmps

2

Ich bin mir ziemlich sicher sein, dass der Anruf an f.mkdirs() Ihr Problem. Wenn die Datei noch nicht existiert (was Ihr Fall zu sein scheint), wird der Aufruf f.mkdirs() Ihnen ein Verzeichnis namens "library.ser" anstelle einer Datei geben, weshalb Ihr Aufruf "save()" nicht funktioniert - Sie können ein Objekt nicht in ein Verzeichnis serialisieren.

+0

Mit anderen Worten, es gibt keine solche Einschränkung. Ich verstehe nicht wirklich, was dieser Satz damit zu tun hat oder was er wirklich bedeutet. – EJP

+0

Es bedeutet, dass das Betriebssystem es ihm erlaubt, ein Verzeichnis namens "library.ser" zu erstellen. Wenn er "save()" aufruft, versucht er letztendlich, in ein Verzeichnis zu serialisieren, was nicht möglich ist. – CodeBlind

+0

Es bedeutet, dass die Einschränkung, die Sie erwähnten, imaginär ist. – EJP

Verwandte Themen