2012-08-29 13 views
8

Qual è il modo migliore/più semplice per rinominare un file nella memoria interna dell'applicazione? Trovo un po 'strano che ci sia un metodo Context.deleteFile(), ma nessuna funzione "sposta" o "rinomina". Devo andare fino in fondo a salvare il contenuto del file, cancellarlo, crearne uno nuovo e poi copiare i contenuti in quello? O c'è un modo per copiare un file su un file esistente?Rinomina un file nella memoria interna

Update (30 Agosto 2012):

Come per la soluzione suggerita di seguito, che non posso andare al lavoro:

  • Ho un file chiamato shoppinglists.csv
  • Poi ho crea un nuovo file chiamato shoppinglists.tmp e copia i contenuti da shoppinglists.csv E alcune nuove voci in questo. Il file shoppinglist.tmp è poi una nuova versione del file shoppinglists.csv
  • Poi ho eliminare il vecchio file shoppinglists.csv
  • poi ho bisogno di rinominare il file shoppinglists.tmp a shoppinglists.csv

ho provato questo:

ctx.deleteFile("shoppinglists.csv");   <--- delete the old file 
File oldfile = new File("shoppinglists.tmp"); 
File newfile = new File("shoppinglists.csv"); 
oldfile.renameTo(newfile); 

Tuttavia, questo non funziona. Dopo deleteFile(), non succede più nulla e mi rimane il nuovo file shoppinglists.tmp.

Cosa mi manca?

NB: non ci sono errori o altro in LogCat.

+0

controllare questa soluzione http://stackoverflow.com/questions/2896733/how-to-rename-filename-in-sdcard-with-android-application –

risposta

0

renameTO() non funziona nel mio ambiente (Eclipse Indigo, AVD con Android versione 2.3). La soluzione è di saltare il metodo di file temporaneo alltogeher, dal momento che non sembra possibile risolverlo in qualsiasi ragionevole intervallo di tempo.

0

È necessario utilizzare il metodo renameTo() di Classe file.

File testFile = new File ("test.txt"); // Assuming it is in Internal Storage 
testFile.renameTo ("newTest.txt"); 
+0

non riesco a ottenere quello per funzionare - si prega di consultare la descrizione del problema aggiornato (domanda). –

+0

Nessuno ha qualche idea? Sto pensando a problemi di autorizzazioni, ma è un po 'strano dato che l'applicazione è in grado sia di eliminare e creare nuovi file, sia di aggiungere dati a loro. Se non riesco a trovare una soluzione, dovrò saltare il file temporaneo e utilizzare solo un array [] [] come memoria temporanea, eliminare il file originale, crearne uno nuovo e mettere l'array [] [] contenuti in questo. –

+0

no, non penso al suo problema di autorizzazione, potrei aver bisogno di codice e controllare personalmente il metodo remaneTo(). – Lucifer

5

Invece di utilizzare un costruttore raw File, utilizzare il metodo getFileStreamPath fornito da Context. Vale a dire, fare:

+0

Il problema è presumibilmente che 'new File (" fred ")' si riferisce ad un nome relativo alla directory corrente del programma, che probabilmente non è, e certamente non è garantito, la directory in cui sono memorizzati i file interni. – JulianSymes

0

Penso che non possiamo usare il metodo File.renameTo() nell'ambiente di archiviazione interna. Rinominare un file in questo ambiente, può fare: - Copiare il contenuto del vecchio file in un nuovo file. - Elimina il vecchio file.

0
File file = new File("your old file/folder name"); 
File file2 = new File("your new file/folder name"); 
boolean success = file.renameTo(file2); 
Problemi correlati