Ver la Versión Completa : [ CONSULTA ] Renombrar archivos
kaiser75
16/05/16, 18:45:33
Vereis, tengo una carpeta donde hay varios archivos de audio en diferentes formatos, con el menu contextual se pueden renombrar, me lo renombra bien siempre que sean .3gp , pero los archivos con extension .aac, .m4a, .amr por ejemplo me los renombra a .3gp, ... hay manera de renombrar el archivo pero solo el texto? sin tocar la extension que tiene por defecto? , con un if else quizas?
Estas son las extensiones que tengo.
private String extension = ".3gp";
private String extension2 = ".aac";
private String extension3 = ".m4a";
private String extension4 = ".amr";
mocelet
16/05/16, 19:06:00
La extensión es parte del nombre del fichero, así que asegúrate de incluirla en el nuevo nombre correctamente.
El error lo tendrás en la línea que ponga renameTo, o en la línea donde construyas el File que representa el nuevo nombre.
kaiser75
16/05/16, 23:34:35
Eso lo tengo correcto mocelet, lo que intento es renombrar pero sin tocar la extension del archivo, solo el string de antes de la extension.
mocelet
17/05/16, 00:33:17
En los File no existe el concepto de extensión, el ".m4a" por ejemplo es parte del nombre y no se trata de forma separada. Si quieres que un fichero que se llamaba pepito.m4a pase a llamarse fulanito.m4a tienes que pasar como nuevo nombre del fichero "fulanito.m4a". El nombre que estás pasando ahora no es correcto por lo que cuentas.
Ahí ya es más un problema de tratamiento de String. Si quieres conservar lo que viene después del punto (la extensión para entendernos) en el fichero original, tendrás que extraerlo y asegurarte de añadirlo al nuevo nombre que quieres poner.
Una forma sencilla es usar el lastIndexOf del String original para localizar el punto. Sabiendo dónde está el punto ya puedes usar el método substring para coger lo que viene antes (el nombre) y lo que viene después (la extensión).
kaiser75
17/05/16, 10:00:25
Exacto, lo del "lastIndex" y "substring" eso es lo que intento hacer pero no me sale. Este es el codigo que uso por ejemplo para renombrar archivos .3gp, el cual no funciona si el archivo a renombrar no coincide con la extension .3gp, (si es .3gp va bien) si es "pepito.aac" y lo renombro a lo que sea me da como resultado "otropepito.3gp" por ejemplo.
Path = Environment.getExternalStorageDirectory().getPath( )...etc;
String value = input.getText().toString(); // edittext del cual cojo el nuevo nombre
fileName = input.getText().toString() + extension;
File file = new File(Path + archivo); // antiguo
File file2 = new File(Path + value + extension); // nuevo
if (file2.exists()) {
try {
throw new java.io.IOException("El nombre ya existe!");
} catch (IOException e) {
e.printStackTrace();
}
}
boolean success = file.renameTo(file2);
if (!success) {
System.out.println("No se puede renombrar el archivo!");
} else {
System.out.println("Archivo renombrado correctamente!");
}
Toast.makeText(Actividad1.this, "Renombrado correctamente"
+ "\n" + value + extension, Toast.LENGTH_SHORT).show();
mocelet
17/05/16, 10:14:04
Y la parte interesante no la pones jeje :D ¿Dónde determinas el valor de extension?
Aaaah, que es la variable del primer mensaje, entonces normal que todos los ficheros se renombren a 3gp si a todos les pones esa extensión
kaiser75
17/05/16, 10:18:27
Exacto, solo me falta incluir el "lastintex" o "substring" para poder detectar la extension del archivo a renombrar :D
mocelet
17/05/16, 10:20:02
Ahí te va un código más o menos, no lo he compilado ni nada, pero el concepto es ese:
String original = file.getName();
int n = original.lastIndexOf('.');
String extension = n > 0 ? original.substring(n) : "";
kaiser75
17/05/16, 11:11:02
Gracias mocelet :ok: te me has adelantado jajaja, al final lo he conseguido mas o menos como decias, asi es como me ha funcionado, ahora me detecta la extension del archivo a renombrar correctamente.
String archivo...etc
int dot = archivo.lastIndexOf(".");
String ext = archivo.substring(dot + 1);
String extens = "." + ext;
mocelet
17/05/16, 11:40:01
No hay de qué, aunque tu código no funcionaría bien en caso de que el fichero no tenga extensión. Y tampoco tiene mucho sentido saltarse el punto con el +1 para luego volver a añadirlo.
kaiser75
18/05/16, 10:44:33
Bueno si, no tiene logica lo del punto :silbando:, lo de si el archivo no tiene extension no funciona es irrelevante, ya que la app nunca tendra archivos sin extension, de todos modos es bueno saberlo :ok:
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.