Estoy un poco confundida con todas estas nuevas e/S de Archivos de clases en el JDK7.

Digamos, tengo un Path y desea cambiar el nombre del archivo que representa. ¿Cómo puedo especificar el nuevo nombre, cuando de nuevo un Path se espera?

Path p = /* path to /home/me/file123 */;
Path name = p.getName(); /* gives me file123 */
name.moveTo(/* what now? */); /* how to rename file123 to file456? */

NOTA: ¿por Qué necesito JDK7? Manejo de enlaces simbólicos!

Problema es: que tengo que hacer con los archivos cuyos nombres y los lugares son conocidos en tiempo de ejecución. Así, lo que yo necesito, es un seguro método (sin excepcionales efectos secundarios) para crear un nuevo nombre de la Ruta de algunos antiguo nombre de la Ruta.

Path newName(Path oldName, String newNameString){
    /* magic */ 
}

6 Comentarios

  1. 7

    Usted tiene una cadena de ruta de acceso y necesita crear una Ruta de acceso de la instancia. Usted puede hacer esto con la getPath método o resolver. He aquí una manera:

    Path dir = oldFile.getParent();        
    Path fn = oldFile.getFileSystem().getPath(newNameString);
    Path target = (dir == null) ? fn : dir.resolve(fn);        
    oldFile.moveTo(target); 

    Nota que comprueba si el padre es nulo (parece que su solución no hacerlo).

  2. 56

    En JDK7, Los archivos.move() proporciona una breve y concisa sintaxis para cambiar el nombre de archivos:

    Path newName(Path oldName, String newNameString) {
        return Files.move(oldName, oldName.resolveSibling(newNameString));
    }

    Primer estamos recibiendo el Camino para el nuevo nombre de archivo usando Ruta de acceso.resolveSibling()
    y la usamos Los archivos.move() de hacer un verdadero cambio de nombre.

    • Esto tiene la ventaja añadida de ser independiente de la plataforma, a diferencia de moveTo que se puede romper de vez en cuando.
  3. 4

    ACEPTAR, después de todo, tratando de salir, parece que he encontrado el método correcto:

    //my helper method
    Path newName(Path oldFile, String newNameString){
        //the magic is done by Path.resolve(...)
        return oldFile.getParent().resolve(newNameString);
    }
    
    //so, renaming is done by:
    oldPath.moveTo(newName(oldFile, "newName"));
  4. 1

    Si usted echa un vistazo a Apache Commons IO hay una clase llamada FileNameUtils. Esto hace un montón de cosas wrt. nombres de ruta de archivo y (entre otras cosas) de forma fiable dividir nombres de ruta de acceso etc. Creo que debería ir un largo camino hacia lo que quieres.

    • Lo siento, necesito simbólico-enlaces-conocimiento de Api. Todos estos Apache Commons cosas es, en el mejor de Java-5-compatible, pero la mayoría de Java 1.4.
    • No ayudarle puramente en términos de la separación y montaje de los nombres de archivo, y usted puede utilizar Java 7 enlace simbólico consciente de cosas para llevar a cabo realmente el copiar/cambiar el nombre ?
    • Buena funcionalidad para el manejo de los enlaces simbólicos se proporciona sólo por JDK7, porque tiene bajo nivel (nivel binario) los enlaces con el sistema operativo.
    • Me temo, que tal separación y montaje en determinadas circunstancias puede conducir a errores. Pero espera, ahora estoy experimentando con Path.resolve(String name). Creo que eso es todo.
  5. 0

    Si la ruta de acceso de destino es idéntica a la ruta de origen , excepto para el nombre del archivo, será cambiado de nombre en lugar de mover.

    Así, por ejemplo, el moveto ruta de acceso debe ser

    /home/me/file456
    • Así que sólo puede crear un nuevo Path? ¿Hay algo más simple que: Ruta newName = Rutas.get(nombre.getParent().toString()+pathSeparator+»nuevonombre»); ?
    • Sí, ahora la pregunta es: cómo crear tales ruta de acceso de una forma segura, de modo que no existen circunstancias excepcionales podría causar que falle.
    • Yo podría intentar describir cómo se podría tomar la ruta original, la tira fuera el nombre de ‘file123’ concatenar ‘file456’ en lugar de invocar y name.moveTo() pero como yo no sé realmente de Java, me gustaría estar adivinando. Lo que estoy seguro es que un mover se convierte en un cambiar si el nombre de archivo es diferente.
    • Aah, parece que la caballería ha llegado…
  6. -1

    Si usted no puede conseguir en Java para hacer lo que quieras con Unix recomiendo secuencias de comandos de Python (ejecutado por el programa de Java). Python dispone de obtener apoyo para Unix scripting y no de Perl 🙂 Esto podría parecer poco elegante para usted, pero realmente en un programa más amplio usted recibirá los beneficios de usar la herramienta correcta para el trabajo.

Dejar respuesta

Please enter your comment!
Please enter your name here