2013-03-04 14 views
9

Sto cercando di serializzare la seguente classe:File.mkdirs() la creazione di una directory invece di un file

public class Library extends ArrayList<Book> implements Serializable{ 

public Library(){ 
    check(); 
} 

utilizzando il seguente metodo di quella classe:

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

Tuttavia, piuttosto che creando un file chiamato library.ser, il programma sta creando una directory denominata library.ser con niente al suo interno. Perchè è questo?

Se il suo utile, il metodo save() viene inizialmente chiamato da questo metodo (della stessa classe):

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

risposta

21

File.mkdirs() Creazione di una directory invece di un file

Questo è quello che dovrebbe fare. Leggi il Javadoc. Nulla lì sulla creazione di un file.

f.mkdirs();

È questa linea che crea la directory. Dovrebbe essere

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

E anche 'f.createNewFile()', per creare il file che non esiste. – ddmps

+1

@Pescis Questo è completamente inutile. 'new FileOutputStream()' lo farà comunque. – EJP

+0

Hai ragione, il 'FileNotFoundException' gettato mi ha confuso. – ddmps

2

Sono abbastanza sicuro che la chiamata a f.mkdirs() è il tuo problema. Se il file non esiste già (il che sembra essere il tuo caso), la chiamata f.mkdirs() ti darà una directory chiamata "library.ser" invece di un file, motivo per cui la tua chiamata "save()" non funziona - Non è possibile serializzare un oggetto in una directory.

+0

In altre parole, non esiste un simile vincolo. Non capisco davvero che cosa abbia a che fare questa frase o che cosa significhi veramente. – EJP

+0

Significa che il sistema operativo gli consente di creare una directory chiamata "library.ser". Quando chiama "save()", sta alla fine tentando di serializzare su una directory, il che non è possibile. – CodeBlind

+0

Significa che il vincolo che hai menzionato è immaginario. – EJP

Problemi correlati