Cómo cambiar el nombre de un archivo en sdcard con la aplicación de Android?

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

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(); } 

También utilicé el método renameTo (Archivo f) pero no funciona.

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

¿Le ha dado permiso a su aplicación para escribir en la tarjeta SD ?

Para ello, agregue lo siguiente a su AndroidManifest.xml :

  

Si no funciona una vez que se agrega el permiso, verifique el registro del dispositivo en busca de errores cuando intente cambiar el nombre del archivo (ya sea utilizando el comando adb o en la vista de logcat en Eclipse).

Al acceder a la tarjeta SD, no debe codificar la ruta, sino usar el método 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 verificar el proceso, puede hacer lo siguiente:

 boolean renamed = from.renameTo(to); if (renamed) { Log.d("LOG","File renamed..."); }else { Log.d("LOG","File not renamed..."); } 

también puede dar explícitamente 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); 

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

A continuación está 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");