2014-09-25 20 views
5

Ho un pulsante nella mia app chiamato "Reset" che elimina un'intera cartella (cartella utente). Dopo di che, sto cercando di creare nuovamente la stessa cartella e la prima volta che provo, mi consente di creare la cartella, ma la seconda volta che provo a reimpostare e ricreare la cartella utente, l'app si arresta in modo anomalo perché l'mkdir() non ha creato la cartella e ho tentato di creare un database su quella cartella. Ma la cosa strana è che, dopo essersi schiantato, la cartella è stata creata.mkdir() restituisce false dopo aver eliminato la cartella

mi ha l'autorizzazione:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

ho provato entrambi i metodi:

f.mkdir(); 
f.mkdirs(); 

Quello che ho potuto fare di sbagliato? Qualche idea?

+0

Ho visto un sacco di domande su questo, ma nessuno di loro mi ha aiutato. –

+1

Invece di ** eliminare e ricreare la stessa cartella **, perché non basta ** svuotarlo **? È una soluzione più intelligente (e anche ottimizzata). –

+0

Ci ho pensato, ma quello che voglio è eliminare completamente tutta la cartella utente, non è una cartella inutile, anche se è vuota. Penso che questa sia una soluzione "sporca". Anche se lo farò se non riesco a risolverlo. –

risposta

0

Penso che sia perché si sta chiamando un metodo per creare la cartella, Prima che venga creata la cartella si sta tentando di creare un DB in quella cartella!

Possibile soluzione

provare a creare il database dopo che la cartella viene creato correttamente. E mentre crei un database, controlla ancora se quella cartella/percorso esiste.

+0

Ho provato a creare la cartella prima, ma come ho detto, mkdir non funziona e restituisce false. –

+0

mkdir e mkdirs restituiscono false se la directory esiste già, quindi questa potrebbe essere una delle ragioni dell'errore. Se si utilizza Java 7, è possibile utilizzare la classe File. Genera un errore IOException con descrizioni abbastanza buone Files.createDirectory (file.toPath()); – Rohit

+0

Posso usare Java 7 su Android? Io non la penso così –

3

Ho anche affrontato lo stesso problema. Ma, finalmente, penso di aver trovato una soluzione (potrebbe essere una soluzione).

Quando si elimina la directory, rinominarla ed eliminarla. Quindi, di solito, creare la directory utilizzando File.mkdirs(). Questo dovrebbe funzionare bene. Ho provato nel mio caso. Funziona!!!

public static final void renameAndDelete(File fileOrDirectory) { 
    File newFile = new File(fileOrDirectory.getParent() + File.separator 
       + "_" + fileOrDirectory.getName()); 
    fileOrDirectory.renameTo(newFile); 
    delete(newFile); 
} 
public static final void delete(File fileOrDirectory) { 
    if (fileOrDirectory.isDirectory()) 
     for (File child : fileOrDirectory.listFiles()) 
      delete(child); 

    fileOrDirectory.delete(); 
} 
Problemi correlati