2010-05-24 12 views
11

En mi aplicación Android, quiero cambiar el nombre del nombre del archivo en tiempo de ejecución. ¿Cómo puedo hacerlo?¿Cómo cambiar el nombre de un archivo en sdcard con la aplicación de Android?

Este es mi código:

String[] command = {" mv", "sun moon.jpg"," sun_moon,jpg"}; 
try 
{ 
    Process process = Runtime.getRuntime().exec(command); 
} 
catch (IOException e) 
{ 
    Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); 
} 

I método renameTo (File f) también se utiliza, pero no funciona.

+0

Visita [éste] [1] [1]: http://stackoverflow.com/questions/9065514/move-rename- file-in-sd-card –

+1

Necesita aceptar respuestas si quiere que la gente lo ayude, FYI – Gattsu

Respuesta

81

yo recomendaría usar File.renameTo() en lugar de ejecutar el comando mv, ya que estoy bastante seguro de que este último no es compatible ..

¿Ha dado a su application permission to write to the SD Card?

Para ello, adding the following to your AndroidManifest.xml:

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

Si no funciona una vez que se añade el permiso comprobar el registro de errores dispositivo cuando intenta cambiar el nombre del archivo (ya sea usando el comando adb o en el logcat ver en Eclipse).

Al acceder a la tarjeta SD, no debe codificar la ruta, sino utilizar el método the Environment.getExternalStorageDirectory() para obtener el directorio.

El siguiente código funciona para mí:

File sdcard = Environment.getExternalStorageDirectory(); 
File from = new File(sdcard,"from.txt"); 
File to = new File(sdcard,"to.txt"); 
from.renameTo(to); 

y si desea comprobar el proceso, se puede hacer como:

boolean renamed = from.renameTo(to); 

if (renamed) { 
    Log.d("LOG","File renamed..."); 
}else { 
    Log.d("LOG","File not renamed..."); 
} 
+0

Ahora intento Archivo f1 = new File ("/ sdcard/sun moon.jpg"); Archivo f2 = nuevo archivo ("/ sdcard/soon_moon.jpg"); \t try { \t f1.renameTo (f2); \t} catch (Excepción e) { \t \t Toast.makeText (this, "" + e, Toast.LENGTH_LONG) .show(); \t \t} y utilizar el permiso en el archivo AndroidManifest.xml pero aún así, no hay cambios. – Addy

+0

No hay ningún error en logcaat – Addy

+0

He actualizado mi respuesta con el código que funciona para mí.¿'RenameTo()' devuelve 'true' o' false' cuando lo ejecuta? Si devuelve 'false', ¿qué devuelve' f1.exists() '? –

5

también se puede dar de forma explícita la ruta completa sin especificar el directorio ...

File file = new File("Path of file which you want to rename"); 
File file2 = new File("new name for the file"); 
    boolean success = file.renameTo(file2); 
0

Intenté agregar permisos. Aunque no funcionó, agregar File1.setWritable(true); me permitió cambiar el nombre del archivo.

A continuación es mi fragmento de código:

if(from.setWritable(true)) 
    Log.d("InsertFragmentTwo ", "FileName==> Is Writable"); 
File two = new File(sdcard,""+imageCount+"."+s.substring((s.lastIndexOf(".")+1))); 
if (from.renameTo(two)) { 
    Log.d("InsertFragmentTwo ", "New FileName==> " + temp); 
    imageCount++; 
    retrofitImageUpload(temp); 
} else 
    Log.d("InsertFragmentTwo ", "File Renaming Failed"); 
Cuestiones relacionadas