2012-08-29 25 views
8

¿Cuál es la mejor y más fácil manera de cambiar el nombre de un archivo en el almacenamiento interno de la aplicación? Me parece un poco extraño que haya un método Context.deleteFile(), pero no una función "mover" o "cambiar el nombre". ¿Tengo que recorrer todo el tiempo guardando los contenidos del archivo, eliminándolo, creando uno nuevo y luego copiando los contenidos en ese? ¿O hay una forma de copiar un archivo sobre un archivo existente?Cambiar el nombre de un archivo en el almacenamiento interno

Actualización (30 de agosto de 2012):

De acuerdo con la solución sugerida a continuación, que no puedo ir a trabajar:

  • tengo un archivo llamado shoppinglists.csv
  • Entonces cree un nuevo archivo llamado shoppinglists.tmp y copie los contenidos de shoppinglists.csv Y algunas entradas nuevas en eso. El archivo shoppinglist.tmp es entonces una nueva versión del archivo shoppinglists.csv
  • Luego eliminar el archivo shoppinglists.csv edad
  • entonces tengo que cambiar el nombre del archivo shoppinglists.tmp a shoppinglists.csv

he intentado esto:

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

sin embargo, esto no funciona. Después de deleteFile(), no ocurre nada más, y me queda el nuevo archivo shoppinglists.tmp.

¿Qué me estoy perdiendo?

NB: No hay errores ni nada en LogCat.

+0

Comprobar esta solución http://stackoverflow.com/questions/2896733/how-to-rename-filename-in-sdcard-with-android-application –

Respuesta

0

renameTo() no funciona en mi entorno (Eclipse Indigo, AVD con la versión Android 2.3). La solución es omitir el método de archivo temporal alltogeher, ya que no parece posible resolverlo en un marco de tiempo razonable.

0

Debe utilizar el método renameTo() de File Class.

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

no puedo conseguir que funcione - por favor vea la descripción actualizada del problema (pregunta). –

+0

Nadie tiene alguna idea? Estoy pensando en los problemas de permisos, pero eso es un poco extraño, ya que la aplicación puede eliminar y crear nuevos archivos, así como agregar datos a ellos. Si no puedo encontrar una solución a esto, tendré que omitir el archivo temporal y simplemente usar una matriz [] [] como almacenamiento temporal, eliminar el archivo original, crear uno nuevo y poner la matriz [] [] contenidos en eso. –

+0

no, no creo que sea un problema de permiso, es posible que deba codificar y verificar personalmente el método remaneTo(). – Lucifer

5

En lugar de usar un constructor sin formato File, utilice el método getFileStreamPath proporcionado por Context. Es decir, hacer:

File oldfile = ctx.getFileStreamPath("shoppinglists.tmp"); 
File newfile = ctx.getFileStreamPath("shoppinglists.csv"); 
oldfile.renameTo(newfile); 
+0

El problema es presumiblemente que 'nuevo archivo (" fred ")' se refiere a un nombre relativo al directorio actual del programa, que probablemente no es, y ciertamente no garantiza, el directorio en el que se almacenan los archivos internos. – JulianSymes

0

Creo que no podemos usar el método File.renameTo() en el entorno de almacenamiento interno. Al cambiar el nombre de un archivo en este entorno, se puede: - Copiar el contenido del archivo anterior a un archivo nuevo. - Eliminar el archivo anterior.

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