2014-09-12 12 views
6

Ho creato un elenco di file per memorizzare alcuni attributi dopo che sono stati aperti una volta nella mia app. Ogni volta che si apre il file, questi attributi sono cambiati, quindi li ho cancellati e creati di nuovo.Elimina i file più vecchi di un dato orario dalla directory

ho creato tutti i file file utilizzando

File file =new File(getExternalFilesDir(null), 
       currentFileId+""); 
if(file.exists()){ 
      //I store the required attributes here and delete them 
      file.delete(); 
}else{ 
      file.createNewFile(); 
} 

Voglio eliminare tutti i file più vecchi di qui una settimana come questi attributi memorizzati non saranno più necessari. Qual è il metodo appropriato per farlo?

+1

file Creazione per memorizzare temporaneamente gli attributi suona come una cattiva idea, se i vostri attributi sono il numero o stringhe. La memorizzazione dei dati in un database SQL è probabilmente molto più efficiente e pratica. – Christian

+0

quei file sono di dimensioni molto ridotte Mi chiedo se questi file di numeri non siano molto numerosi e riempiano la memoria del dispositivo con spazio di memoria relativamente basso, creerebbe un problema. solo per questo scopo voglio cancellare quei file. –

risposta

14

Questo dovrebbe fare il trucco. Creerà un'istanza del calendario fino a 7 giorni fa e confronterà se la data di modifica del file è precedente a quella data. Se ciò significa che il file è più vecchio di 7 giorni.

if(file.exists()){ 
     Calendar time = Calendar.getInstance(); 
     time.add(Calendar.DAY_OF_YEAR,-7); 
     //I store the required attributes here and delete them 
     Date lastModified = new Date(file.lastModified()); 
     if(lastModified.before(time.getTime())) 
     { 
      //file is older than a week 
     } 
     file.delete(); 
    }else{ 
     file.createNewFile(); 
    } 

Se si desidera ottenere tutti i file in una directory che è possibile utilizzare questo e poi iterare il risultato e confrontare ogni file.

public static ArrayList<File> getAllFilesInDir(File dir) { 
    if (dir == null) 
     return null; 

    ArrayList<File> files = new ArrayList<File>(); 

    Stack<File> dirlist = new Stack<File>(); 
    dirlist.clear(); 
    dirlist.push(dir); 

    while (!dirlist.isEmpty()) { 
     File dirCurrent = dirlist.pop(); 

     File[] fileList = dirCurrent.listFiles(); 
     for (File aFileList : fileList) { 
      if (aFileList.isDirectory()) 
       dirlist.push(aFileList); 
      else 
       files.add(aFileList); 
     } 
    } 

    return files; 
} 
+0

File file = nuovo file (getExternalFilesDir (null), currentFileId + ""); Crea il nome del file con l'ID. Desidero eliminare il file senza sapere quale sia il nome del file poiché non ricorderò tutti quegli ID di ogni file –

+1

Quindi è possibile eseguire l'iterazione di tutti i file nella directory e controllare se essi sono più vecchi di 7 giorni. –

+0

Ho un problema in iterazione, senza conoscere il nome del file, voglio cancellarli. –

0

File.lastModified() restituisce una lunga Int in Unix Time

2
if (file.exists()) { 
    Date today = new Date(); 

    int diffInDays = (int)((today.getTime() - file.lastModified()) /(1000 * 60 * 60 * 24)); 
    if(diffInDays>7){ 
      System.out.println("File is one week old"); 
      //you can delete the file here 
    } 
} 
+0

Non c'è bisogno di trasformare il file modificato a lungo in una data poiché si utilizzano comunque i millisecondi. Ma nel complesso un buon approccio anche. –

+0

grazie ho avuto la mia soluzione :) combinando il tuo codice con @PedroOliveira –

+0

è una settimana o un giorno? : P –

Problemi correlati