elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Error renombrar archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error renombrar archivos  (Leído 1,888 veces)
Puchu

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Error renombrar archivos
« en: 24 Enero 2019, 16:51 pm »

Buenas tardes,

He creado un código con Java para renombrar archivos .wav que tienen nombre tipo "03010101.wav" a "001.wav". Quiero que los coja uno a uno y los renombre con un contador desde el 001, 002, 003, hasta el último archivo que encuentre.

La cosa es que haciendo un .batch y el comando RENAME, te lo hace. Pero parece ser que con Java no es tan fácil. No entiendo por qué, los archivos salen dañados al pasarles el programa.

La idea del programa es que lo pones en la raíz donde tienes los archivos de muchos idiomas, va accediendo a las carpetas y renombrando los archivos.

Os paso el código a ver si es algún fallo mío de concepto, quizás me falta algo o lo que sea.

Mil gracias de antemano.

Código:
package renombrararchivos.v2;

import java.io.File;
import java.util.*;

public class RenombrarArchivosV2 {
   public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in); 
       
        File DirectorioActual = new File(".");//File para encontrar el directorio del programa
        String DireccionDirectorioActual = DirectorioActual.getPath();//Direccion del directorio donde está el programa
        File Raiz = new File(DireccionDirectorioActual);//File que apunta al directorio donde está el programa
        File CarpetaRaiz[] = Raiz.listFiles();//Lista las carpetas de todos los idiomas
       
        for(int NumeroIdiomas = 0;NumeroIdiomas < CarpetaRaiz.length;NumeroIdiomas++)//FOR para recorrer la carpeta RAIZ
        {
            int RenombradoNumero = 1;//Variable que va a dar nombre a los archivos
            String DireccionCarpetasIdiomas = CarpetaRaiz[NumeroIdiomas].getPath();//Direccion de la carpeta de idioma que se está renombrando
            File CarpetasIdiomas = new File(DireccionCarpetasIdiomas);//File que apunta al a carpeta de idioma que se está renombrando
            File ArchivosCarpetaIdiomas[] = CarpetasIdiomas.listFiles();//Lista todos los archivos dentro de la carpeta del idioma actual
            for(int NumeroArchivos = 0;NumeroArchivos < ArchivosCarpetaIdiomas.length;NumeroArchivos++)//FOR para realizar los cambios de nombre
            {
                String DireccionNombresArchivosAntiguos = ArchivosCarpetaIdiomas[NumeroArchivos].getPath();//Dirección (nombre) del archivo antiguo
                File ArchivoAntiguo = new File(DireccionNombresArchivosAntiguos);//File que almacena el nombre antiguo
                String RenombradoCadena = String.format("%03d",RenombradoNumero);//Cambio el formato del contador a String y con 3 dígitos.
                File NuevoArchivo = new File(CarpetasIdiomas+"\\"+RenombradoCadena+".wav");//Creo el File del nuevo archivo
                ArchivoAntiguo.renameTo(NuevoArchivo);//Para acabar renombrandolos aquí
                RenombradoNumero++;//Sumo al contador para que el nombre cambie
            }
        }
    }
}


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Error renombrar archivos
« Respuesta #1 en: 24 Enero 2019, 20:16 pm »

Bueno ahí va. usa GeSHI



Breve descripción dog, usando java8 con NIO.2

  • linea 21 método find() es recursivo, cruza enlaces simbólicos y un limite de 10
    también podría servir el método Files.walk(Path start, int maxDepth, FileVisitOption... options)
  • Uso de JFileChooser para que escojas el directorio, no hace falta que pongas el bytecode en el dir
  • Linea 30 método Files.move() renombra el archivo y lo deja en el mismo lugar con resolveSibling, o lo reemplaza si existe con
    StandardCopyOption.REPLACE_EXISTING
  • Mover un archivo es lo mismo que renombrarlo, entonces lo dejamos en el mismo puñetero lugar  >:D
  • Tu código medio algo de flojera  :(

Código
  1. public class RenameTo {
  2.  
  3.    private static final Logger LOGGER = Logger.getLogger(RenameTo.class.getSimpleName());
  4.  
  5.    private Instant init;
  6.    private Instant end;
  7.  
  8.    public RenameTo() {
  9.        renameWavs();
  10.    }
  11.  
  12.    /**
  13.      * java 8 NIO2.0
  14.      * usar FileVisitOption.FOLLOW_LINKS en caso de enlaces simbolicos
  15.      * y estableciendo un limite con (10 maxDepth) logrando evitar directorio circular
  16.      * lo recomendable es usar un límite de profundidad apropiado cuando se utiliza esta opción
  17.      */
  18.    private void renameWavs() {
  19.        this.init = Instant.now();
  20.        final AtomicReference<Integer> atomicIncrementador = new AtomicReference<>(0);
  21.        try (final Stream<Path> streamDir = Files.find(RenameTo.getPath(), 10,
  22.                (path, attr) -> path.toString().endsWith(".wav"), FileVisitOption.FOLLOW_LINKS)) {
  23.  
  24.            streamDir
  25.                    .parallel()
  26.                    .forEachOrdered(e -> {
  27.                        try {
  28.                            final Integer num = atomicIncrementador.updateAndGet(ee -> ++ee);
  29.                            LOGGER.info("Renombrando-> " + e.toString() + " a 00" + num + ".wav");
  30.                            Files.move(e, e.resolveSibling("00" + num + ".wav"), StandardCopyOption.REPLACE_EXISTING);
  31.                        } catch (IOException e1) {
  32.                            e1.printStackTrace();
  33.                            LOGGER.severe(e1.getMessage());
  34.                            JOptionPane.showMessageDialog(null,
  35.                                    "Error",
  36.                                    "Erro al renombrar",
  37.                                    JOptionPane.ERROR_MESSAGE);
  38.                        }
  39.                    });
  40.            this.end = Instant.now();
  41.            ShowData.showLn(tiempoTotal());
  42.            JOptionPane.showMessageDialog(null, "Renombrado listo " +tiempoTotal());
  43.        } catch (IOException ex) {
  44.            ex.printStackTrace();
  45.            LOGGER.severe(ex.getMessage());
  46.        }
  47.  
  48.    }
  49.  
  50.    private String tiempoTotal() {
  51.        final StringBuilder sb = new StringBuilder("Tiempo Total: ");
  52.        final long millis = Duration.between(init,end).toMillis();
  53.        final long sec = millis / 1000;
  54.        sb.append(sec);
  55.        sb.append(" sec ");
  56.        sb.append(millis);
  57.        sb.append(" ms");
  58.        return sb.toString();
  59.    }
  60.  
  61.    /**
  62.      * @return ruta absoluta del directorio por medio del JFileChooser
  63.      */
  64.    private static Path getPath() {
  65.        final JFileChooser jFileChooser = new JFileChooser();
  66.        jFileChooser.setFileFilter(new FileNameExtensionFilter("archivos .wav", "wav"));
  67.        jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  68.        final int opc = jFileChooser.showOpenDialog(null);
  69.        if (opc == JFileChooser.CANCEL_OPTION) {
  70.            LOGGER.info("Cancelado");
  71.            System.exit(0);
  72.        }
  73.        return jFileChooser.getSelectedFile().toPath().toAbsolutePath();
  74.    }
  75.  
  76.    public static void main(String... blabla) {
  77.        try {
  78.            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  79.        } catch (Exception ex) {
  80.            ex.printStackTrace();
  81.        }
  82.        new RenameTo();
  83.    }
  84. }
  85.  
  86.  
  87.  

Salida

Código
  1. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  2. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\001.wav a 001.wav
  3. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  4. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\español\002.wav a 002.wav
  5. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  6. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\español\españolguatero\003.wav a 003.wav
  7. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  8. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\ingles\004.wav a 004.wav
  9. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  10. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\ingles\spanglish\004.wav a 005.wav
  11. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  12. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\ingles\spanglish\006.wav a 006.wav
  13. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  14. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (3)\007.wav a 007.wav
  15. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  16. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (3)\español\008.wav a 008.wav
  17. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  18. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (3)\español\españolguatero\009.wav a 009.wav
  19. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  20. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (3)\ingles\0010.wav a 0010.wav
  21. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  22. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (3)\ingles\spanglish\0011.wav a 0011.wav
  23. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  24. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (3)\ingles\spanglish\0012.wav a 0012.wav
  25. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  26. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (4)\0013.wav a 0013.wav
  27. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  28. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (4)\español\0014.wav a 0014.wav
  29. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  30. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (4)\español\españolguatero\0015.wav a 0015.wav
  31. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  32. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (4)\ingles\0016.wav a 0016.wav
  33. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  34. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (4)\ingles\spanglish\0017.wav a 0017.wav
  35. Jan 24, 2019 8:52:06 PM com.testjava8.examplesocketwithbus.foro.renombrararchivos.RenameTo lambda$renameWavs$1
  36. INFORMACIÓN: Renombrando-> C:\Users\_0x52e\Desktop\musicawav - copia - copia\musicawav - copia - copia (4)\ingles\spanglish\0018.wav a 0018.wav
  37. Tiempo Total: 3 sec 3608 ms
  38.  
  39. Process finished with exit code 0
  40.  
  41.  


« Última modificación: 26 Julio 2020, 15:18 pm por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] renombrar archivos
Scripting
guidosl 3 9,707 Último mensaje 15 Marzo 2009, 05:03 am
por leogtz
Renombrar archivos [batch]
Scripting
Durango21 8 20,279 Último mensaje 28 Octubre 2009, 22:16 pm
por corax
Renombrar varios archivos a la vez.
Windows
|Miguel| 3 3,346 Último mensaje 5 Noviembre 2011, 23:10 pm
por |Miguel|
renombrar archivos bat « 1 2 »
Scripting
charlyta 10 14,203 Último mensaje 12 Marzo 2012, 18:35 pm
por -- KiLiaN --
renombrar archivos
Scripting
asdexiva 2 3,151 Último mensaje 8 Julio 2013, 23:40 pm
por asdexiva
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines