android file-rename

Android, ¿Cómo renombrar un archivo?



file-rename (9)

Ejemplo de trabajo ...

File oldFile = new File("your old file name"); File latestname = new File("your new file name"); boolean success = oldFile .renameTo(latestname ); if(success) System.out.println("file is renamed..");

En mi aplicación, necesito grabar video. Antes de comenzar a grabar, le estoy asignando un nombre y un directorio. Una vez finalizada la grabación, el usuario puede cambiar el nombre de su archivo. Escribí el siguiente código pero parece que no funciona.

Cuando el usuario ingrese el nombre del archivo y haga clic en el botón, haré esto:

private void setFileName(String text) { String currentFileName = videoURI.substring(videoURI.lastIndexOf("/"), videoURI.length()); currentFileName = currentFileName.substring(1); Log.i("Current file name", currentFileName); File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), MEDIA_NAME); File from = new File(directory, "currentFileName"); File to = new File(directory, text.trim() + ".mp4"); from.renameTo(to); Log.i("Directory is", directory.toString()); Log.i("Default path is", videoURI.toString()); Log.i("From path is", from.toString()); Log.i("To path is", to.toString()); }

Texto: es el nombre que ingresa el usuario. Nombre de archivo actual: es el nombre que asigné antes de grabar MEDIA_NAME: nombre de la carpeta

Logcat muestra esto:

05-03 11:56:37.295: I/Current file name(12866): Mania-Karaoke_20120503_115528.mp4 05-03 11:56:37.295: I/Directory is(12866): /mnt/sdcard/Movies/Mania-Karaoke 05-03 11:56:37.295: I/Default path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/Mania-Karaoke_20120503_115528.mp4 05-03 11:56:37.295: I/From path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/currentFileName 05-03 11:56:37.295: I/To path is(12866): /mnt/sdcard/Movies/Mania-Karaoke/hesam.mp4

Cualquier sugerencia sería apreciada.


El problema está en esta línea,

File from = new File(directory, "currentFileName");

Aquí currentFileName es en realidad una cadena que no tiene que usar "

inténtalo de esta manera,

File from = new File(directory, currentFileName ); ^ ^ //You dont need quotes


Esto es lo que terminé usando. Maneja el caso donde hay un archivo existente con el mismo nombre agregando un entero al nombre del archivo.

@NonNull private static File renameFile(@NonNull File from, @NonNull String toPrefix, @NonNull String toSuffix) { File directory = from.getParentFile(); if (!directory.exists()) { if (directory.mkdir()) { Log.v(LOG_TAG, "Created directory " + directory.getAbsolutePath()); } } File newFile = new File(directory, toPrefix + toSuffix); for (int i = 1; newFile.exists() && i < Integer.MAX_VALUE; i++) { newFile = new File(directory, toPrefix + ''('' + i + '')'' + toSuffix); } if (!from.renameTo(newFile)) { Log.w(LOG_TAG, "Couldn''t rename file to " + newFile.getAbsolutePath()); return from; } return newFile; }


Proporcionar objeto de archivo de destino con diferente nombre de archivo.

// Copy the source file to target file. // In case the dst file does not exist, it is created void copy(File source, File target) throws IOException { InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(target); // Copy the bits from instream to outstream byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); }


Usted debe comprobar si el directorio existe!

File directory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), MEDIA_NAME); if(!directory.exist()){ directory.mkdirs(); }


Utilice este método para cambiar el nombre de un archivo. El archivo from será renombrado a to .

private boolean rename(File from, File to) { return from.getParentFile().exists() && from.exists() && from.renameTo(to); }

Código de ejemplo:

public class MainActivity extends Activity { private static final String TAG = "YOUR_TAG"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File currentFile = new File("/sdcard/currentFile.txt"); File newFile new File("/sdcard/newFile.txt"); if(rename(currentFile, newFile)){ //Success Log.i(TAG, "Success"); } else { //Fail Log.i(TAG, "Fail"); } } private boolean rename(File from, File to) { return from.getParentFile().exists() && from.exists() && from.renameTo(to); } }


En su código:

¿No debería ser?

File from = new File(directory, currentFileName);

en lugar de

File from = new File(directory, "currentFileName");

Por seguridad,

Utilice el File.renameTo (). ¡Pero compruebe la existencia del directorio antes de cambiarle el nombre!

File dir = Environment.getExternalStorageDirectory(); if(dir.exists()){ File from = new File(dir,"from.mp4"); File to = new File(dir,"to.mp4"); if(from.exists()) from.renameTo(to); }

Consulte: http://developer.android.com/reference/java/io/File.html#renameTo%28java.io.File%29


/** * ReName any file * @param oldName * @param newName */ public static void renameFile(String oldName,String newName){ File dir = Environment.getExternalStorageDirectory(); if(dir.exists()){ File from = new File(dir,oldName); File to = new File(dir,newName); if(from.exists()) from.renameTo(to); } }


public void renameFile(File file,String suffix) { String ext = FilenameUtils.getExtension(file.getAbsolutePath()); File dir = file.getParentFile(); if(dir.exists()){ File from = new File(dir,file.getName()); String name = file.getName(); int pos = name.lastIndexOf("."); if (pos > 0) { name = name.substring(0, pos); } File to = new File(dir,name+suffix+"."+ext); if(from.exists()) from.renameTo(to); } }