Renombrar un fichero con Java IO

25/Nov/2006 Java , 30 Comentarios

Entre las muchas operativas que se pueden hacer sobre un fichero tenemos el renombrado de un fichero. Para ello la librería de Java, Java IO, nos ofrece un método sobre la clase File.

Si recordamos un poco la filosofía de la clase Java IO veremos que la clase File representa la abstracción de un fichero o directorio independientemente del sistema de ficheros que tengamos por debajo.

Lo primero que tenemos que hacer es instanciar la clase File sobre el fichero que queramos realizar el renombrado. Para ello utilizamos el constructor de la clase File, como podemos ver en la siguiente línea de código:

  1. File f1 = new File("fichero1.txt");

Lo siguiente será instanciar una nueva clase File con el nombre del fichero que queramos poner. Veámos la línea de código:

  1. File f2 = new File("fichero2.txt");

Con las dos abstraciones de los ficheros solo nos quedará el ejecutar el método .renameTo(File) sobre el primer fichero. El método .renameTo(File) recibe como parámetro un objeto File con el nuevo nombre. El que nosotros hemos llamado f2

  1. boolean correcto = f1.renameTo(f2);

El método .renameTo(File) devuelve un valor booleano indicando si se ha podido realizar el renombrado, o no. A si que para finalizar validaremos la variable booleana con el fin de dar información al usario.

  1. if (correcto)
  2. System.out.println("El renombrado ha sido correcto");
  3. else
  4. System.out.println("El renombrado no se ha podido realizar");

Vídeos sobre Java


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

30 comentarios en “Renombrar un fichero con Java IO”

Víctor Cuervo

Carles

Poniendo este código, si el archivo a renombrar está seleccionado por el explorador de windows, no me lo renombra. ¿Como puedo forzar el renombramiento aunque windows lo tenga seleccionado o bien quitarle la selección?

Víctor Cuervo

Jose David

Hola amigo!!!
Tengo un problema con un codigo

package Proyecto14;

import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import java.io.*;

public class Borrar extends JFrame implements ActionListener {

//Atributos
private String Datos[];
private JLabel etiqueta1,etiqueta2,etiqueta3,etiqueta4,etiqueta5,etiqueta6;
private JButton cargar = new JButton(“Cargar”);
private JButton borrar = new JButton(“Borrar”);
private JLabel texto[];
private JTextField texto1 = new JTextField(5);
int tamaño=6;
String codigo;
//Se crean estas variables para leer y escribir los archivos
DataInputStream archivo = null;
DataOutputStream archivotem = null;
//Estan variables contienen los archivos que se editan y muestran
File archivo1 = new File(“src\\Proyecto14\\archivo.dat”);
File archivotem1 = new File(“src\\Proyecto14\\archivotem.dat”);

Borrar(){
//INterfas grafica
super(“Borrar”);
setSize(300,400);
setResizable(false);
setLocationRelativeTo(null);
EditarEtiquetas();
setLayout(new GridLayout(8, 2));
add(cargar);
add(texto1);
add(etiqueta1);
add(texto[0]);
add(etiqueta2);
add(texto[1]);
add(etiqueta3);
add(texto[2]);
add(etiqueta4);
add(texto[3]);
add(etiqueta5);
add(texto[4]);
add(etiqueta6);
add(texto[5]);
add(borrar);
cargar.addActionListener(this);
borrar.addActionListener(this);
setVisible(true);
}

void EditarEtiquetas(){
etiqueta1 = new JLabel(” Nombre “, SwingConstants.CENTER);
etiqueta1.setFont(new Font(“Calibri”, Font.BOLD, 16));
etiqueta2 = new JLabel(” Apellido “, SwingConstants.CENTER);
etiqueta2.setFont(new Font(“Calibri”, Font.BOLD, 16));
etiqueta3 = new JLabel(” Código “, SwingConstants.CENTER);
etiqueta3.setFont(new Font(“Calibri”, Font.BOLD, 16));
etiqueta4 = new JLabel(” Nota 1 (30%) “, SwingConstants.CENTER);
etiqueta4.setFont(new Font(“Calibri”, Font.BOLD, 16));
etiqueta5 = new JLabel(” Nota 2 (30%) “, SwingConstants.CENTER);
etiqueta5.setFont(new Font(“Calibri”, Font.BOLD, 16));
etiqueta6 = new JLabel(” Nota 3 (40%) “, SwingConstants.CENTER);
etiqueta6.setFont(new Font(“Calibri”, Font.BOLD, 16));
texto = new JLabel [tamaño];
for (int i = 0; i < tamaño; i++) {
texto[i] = new JLabel("Vacio");
texto[i].setFont(new Font("Calibri", Font.BOLD, 16));
}
}

public void actionPerformed(ActionEvent evento) {
if(evento.getSource().equals(cargar)){
try {
codigo = new String(texto1.getText());
archivo = new DataInputStream( new FileInputStream("src\\Proyecto14\\archivo.dat"));
Datos = new String[tamaño];

while (true)
{
for (int i = 0; i < tamaño; i++) {
Datos[i]=archivo.readUTF();
}

if(Datos[2].equals(codigo)){
for (int i = 0; i < tamaño; i++) {
texto[i].setText(Datos[i]);
}
}
}
} catch (Exception e) {
}
}
else if(evento.getSource().equals(borrar)){
//Se copian los datos en un archivo temporal menos que se desea eliminar
try {
codigo = new String(texto1.getText());
archivo = new DataInputStream( new FileInputStream("src\\Proyecto14\\archivo.dat"));
archivotem = new DataOutputStream(new FileOutputStream("src\\Proyecto14\\archivotem.dat",true));
Datos = new String[tamaño];

while (true)
{
for (int i = 0; i < tamaño; i++) {
Datos[i]=archivo.readUTF();
}

if(Datos[2].equals(codigo)){
}
else{
for (int i = 0; i < tamaño; i++) {
archivotem.writeUTF(Datos[i]);
}
}
}
} catch (IOException e) {
}
BorrarRenombrarArchivo();
}
}

void BorrarRenombrarArchivo(){
//Aqui esta el problema
archivo1.delete();
if (archivo1.delete())
System.out.println("El fichero ha sido borrado satisfactoriamente");
else
System.out.println("El fichero no puede ser borrado");
archivotem1.renameTo(archivo1);
if(archivotem1.renameTo(archivo1))
System.out.println("El fichero ha sido renombrado satisfactoriamente");
else
System.out.println("El fichero no puede ser renombrado");
}

}

Solo necesito que el fichero sea borrado y luego sea renombrado, pero no he podido hacerlo, no se cual es el problema, por favor amigo, solicito tu ayuda, urgentemente, estoy un poco desesperado con este programa, gracias!!! Espero tu respuesta

Víctor Cuervo

Roman

a todos aquellos que no les vaya, pensad que las rutas son importantes, nombre del archivo al cual quereis renonbrar tiene que contener la ruta + nombre, si aun asi sigue sin funcionar significa que la ruta no caba con / y teneis unidad/directorioarchivo se soluciona con por ejemplo :

String file2 = ruta+”/”+file2;
File fi2 = new File (file2);
saludos

Víctor Cuervo

eduardo

Hola de nuevo!!Estoy probando esta linea de codigo System.getProperty(“path.separator”);
pero me da error en path(No me la reconoce)…

Y bueno la verdad es que yo estoy creando los ficheros en el mismo directorio de la aplicación , así que no uso ningun path. el problema es que en Ubuntu funciona perfectamente y en Windows XP No….
Sigo buscando soluciones…..

Gracias,si tiene alguna idea mas estaré encantado de escucharla…

Víctor Cuervo

lineadecodigo

Los path cambian de un SO a otro. Tienes que tener cuidado en como los estés utilizando.

La siguiente línea de código
System.getProperty(“path.separator”);

te dice qué separador tiene el SO sobre el que esté corriendo el programa y este lo puedes utilizar para modificar los path de tus ficheros.

Espero que esto te pueda orientar.

Víctor Cuervo

Eduard

Hola linea de codigo! Tengo un problema y espero que me ayude..

He creado un programa con eclipse, en ubuntu y funciona perfectamente..Y luego cuando se lo entrego a la persona que lo va ha utilizar ( con windows xp) me doy cuenta de que no funcina como debería..yo creo que el problema es en los ficheros,al renombrarlos y eso..Yo pesaba que era indiferente el sistema op. que se utiliza pero me he dado cuenta de que no es así.. Sabe mas sobre este tema?
Gracias

Víctor Cuervo

Jui

Vanessa yo tengo un codigo que hace eso, lo hice para la universidad. Desgraciadamente tus faltas de ortografía me impiden moralmente ayudarte. Aprende a escribir.

Víctor Cuervo

Berni

Hola a todos,
Me gustaria saber si es posible borrar el contenido de un fichero.txt en java, me he leido la entrada borrar fichero en java, pero lo que hace es borrarte el fichero entero, yo lo que quiero es que el fichero no se borre del pc, sino que se borre el contenido

Contenido inicial:
Hola que tal?

Contenido Final:

Gracias!

Víctor Cuervo

vanessa

ah, se me olvidava!!!lo necesito urgente menteeeeeee!!!!
muxiximas asias de verdad!!!

Víctor Cuervo

vanessa

buenos dias quiero conseguir codigo para que me coja una carpeta de musica mp3 y me la aga aleatoria!!!!
os agradeceria que me facilitarais ese misterioso codigo por que no doy con el y nos estamos vlviendo lokos mi compi y yo!!!!
estamos asiendo un programa en java que nos piden un reproductor de musica….mp3!!!
bueno muxisimas grasias!!!!!

Víctor Cuervo

juanjo

Hola a todos necesito hacer un codigo para renombrar masivamente archivos y/o carpetas por linea de comando.la sintaxis de comando es:
rename (listaopciones) (patronDE renombrado) (carpetainicial)
opciones: r para renombrar recursivemente en los subdirectorios.
a renombra archivos
c renombra carpetas
patron: son codificaciones q en caso de encontrarse en el patron ,reemplazara en esa misma posicion a su correspondiente descripcion en el nombre final

carpeta inicial: es la capeta desde la se inicia el renombrado.

Víctor Cuervo

zibastian

hola a todos kisiera saber si alguien ha podido renombrar una carpeta o directorio desde una aplicacion java…

PDTA: la carpeta a renombrar tiene archivos y mas carpetas dentro…

Víctor Cuervo

Rafael

Yo haré una pregunta más pesada..
Bajé de una página de internet las homilias de un padre, en formato mp3, legalmente. Resulta que en la página están ordenadas de la más nueva(arrva) a la más vieja (abajo).

Resulta que quiero modificar los 100 archivos mp3 que bajé, para que según el orden en que fueron recitadas esas homilias quede con “001 ” la más vieja homilia y con “100” la más nueva.

El problema es que si ordeno los archivos por fecha de creación no quedan exactamente en orden porque se bajaban de cuatro en cuatro, y uno de esos cuatro tenía menor tamaño, y por ende, se bajaba primero.

Quisiera saber cómo, obtener los strings de las URLs de los hyperlinks de la página de internet con terminación ‘.mp3’ almacenándolos yo en un array de strings y en con ese array comparar y ordenar mi array de files que puedo obtener con las funciones de java.io.File de los mp3’s que bajé, para ahora si poderlos renombrar por orden de antigüedad.

La página es, http://podcast.evangelizacion.org.mx/podcast-homilias.php.

Un ejemplo sería:
URL: ‘http://podcast.evangelizacion.org.mx/mp3/homilias/homilia_No_habra_excusas.mp3’
PathArchivo: ‘C:\homiliasEcaro\homilia_No_habra_excusas.mp3’
NuevoNombreArchivo: ‘C:\homiliasEcaro\100 homilia_No_habra_excusas.mp3’

Gracias.

Víctor Cuervo

TOMAS MENDOZA

hola necesito sobre escribir datos en un archivo tipo txt (block de notas), quiero es esto, ejemplo: tengo en el blok de notas esto:

1//numero de registrados
1666668//cedula
Tomas Mendoza// nombre
Ingeniero///

entonces yo en mi programa tengo un boton q es para modificar, como hago para los valores obtenidos por el usuario los sobreescriba alli, ejemplo, si quiero modificar mi nombre por Anres Quintana. deberia salir asi ahora cuando abra el block de notas (archivo txt)

1//numero de registrados
1666668//cedula
Andres Quintana// nombre
Ingeniero///

Víctor Cuervo

sergio david de la cruz perez

deseo urgentemente renombrar un directorio pero desde linea de comandos es decir debera recibir un parametro y renombrara el directorio con el mismo nombre del parametro que le proporcione

anexo el codigo para añadir y borrar me falta el de renombrar

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package pasoparametros;

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

/**
*
* @author MR.INNOVASISTEMS
*/
public class AddDir {

public static void main(String[] args) {

{

try{

for( int i=0; i < args.length; i++ )

//System.out.println(args[i]);

System.out.println(new File(args[i]).mkdir());

}

catch(Exception e){

System.out.println(“Error fatal verifica el codigo”);

}

}

}

}

aca termina crear directorios…………..

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package pasoparametros;

/**
*
* @author MR.INNOVASISTEMS
*/
public class DelDir {

public static void main(String[] args) {

try{

for( int i=0; i < args.length; i++ )

//System.out.println(args[i]);

System.out.println(new java.io.File(args[i]).delete());

}

catch(Exception e){

System.out.println(“Error fatal verifica el codigo”);

}

}
}

// aca termina borrar directorios

// aca comienza mi problema como borro los directorios

lo que he hecho

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package pasoparametros;

import java.io.File;

/**
*
* @author MR.INNOVASISTEMS
*/
public class rendir {

public static void main(String[] args) {

try{

//for( int i=0; i < args.length; i++ )

File primero = new File(args[0]);

File segundo = new File(args[1]);

boolean resultado = primero.renameTo(segundo);

if(resultado)
System.out.println(“El renombrado ha sido correcto”);
else
System.out.println(“El renombrado no se ha podido realizar”);

}

catch(Exception e){

System.out.println(“Error fatal verifica el codigo”);

}

}
}

Víctor Cuervo

Miriam

¿como le puedo borrar la extension a un archivo? Lo hago asi:
for (int x=0;x<ficheros.length;x++){

String fichero=ficheros[x];
String[] f=fichero.split(“\\.”);
for (int i=0;i<f.length;i++){
System.out.println(f[i]);

if (f[i].compareToIgnoreCase(“ACE”)==0){
File fich=new File(fichero);
File fich2=new File(f[0]+”.process”);
try{
boolean ok=fich.renameTo(fich2);

System.out.println(fich2.getName());
}
catch (Exception e){
System.out.println(“no se ha podido renombrar”);
}
}
}

y en la consola sale bien, pero voy a la carpeta y siguen con extensión ACE

Víctor Cuervo

Rogelio

Me sale error en esta parte…Me podrian ayudar?

for(int i=0;i2));
‘,’ expeted
ilegal start of expresion

Víctor Cuervo

javi

si f1 y f2 estan en directorios distintos, f1 es un fichero que existe y quiero que se cree uno igual en la ruta f2 con el nombre nuevo, se puede?

Víctor Cuervo

lineadecodigo

@Omar, para borrar un fichero puedes leerte “Borrar un fichero con Java“.
Espero que te sirva de ayuda.

Víctor Cuervo

Omar

Hola , quiero borrar el contenido de un archivo creado
con q instruccion lo hago ???

Víctor Cuervo

Carlos

Solucionado

No se sobreescribe, si existe f2 no se cambia el nombre de f1, para que funcione, el fichero f2 no debe existir, debe borrarse antes de cambiarle el nombre a f1.

Gracias

Víctor Cuervo

carlos

File f1 = new File(“fichero1.txt”);
File f2 = new File(“fichero2.txt”);
boolean correcto = f1.renameTo(f2);

Suponiendo que esten en el mismo directorio, ¿f1 sobreescribe a f2?

Víctor Cuervo

Mariela

FileWriter file = new FileWriter(“File.aux”, true);

El true en el constructor indica que se le agregaran lineas al archivo, asi no sobreescribe su contenido.

Víctor Cuervo

Edwind

Hola a todos, hay forma de modificar el contenido de un archivo? lo q quiero es agregarle una linea al principio y al final pero sin borrarme el contenido incial, esto se puede en java? lo q se me ocurre es leerlo, guardar su contenido en un buffer, luego escribir un nuevo archivo y sobre este hacer las modificaciones y copiar lo viejo. hay una mejor forma? saludos y gracias

Víctor Cuervo

claudio

boolean correcto;………………..

File archivoacambiar = new File(directorio+cambiar);

if(archivoacambiar.exists()){
System.out.println(“Ingrese el nuevo nombre”);
nombrenuevo = (lect6.readLine());

File archivonuevo = new File(nombrenuevo);

correcto=archivoacambiar.renameTo(archivo);

if(correcto){ //******** NO SE PUEDE EJECUTAR POR ESTA LINEA

System.out.println(“CAMBIADO CON EXITO”);
}
else{

System.out.println(“NO SE PUDO CAMBIAR EL NOMBRE”);
}
}

Víctor Cuervo

claudio

/**
* @(#)Archivo_tarea.java
*
*
* @author
* @version 1.00 2007/5/7
*/

import java.io.*;
public class Archivo_tarea{

int menu()throws IOException {

int x=0, cont=1;

BufferedReader lect = new BufferedReader (new InputStreamReader (System.in));
do{
System.out.println(“MENU”);
System.out.println(“1.-CREAR DIRECTORIO”);
System.out.println(“2.-BUSCAR UN ARCHIVO”);
System.out.println(“3.-LISTAR UN DIRECTORIO”);
System.out.println(“4.-BORRAR UN ARCHIVO”);
System.out.println(“5.-CAMBIAR NOMMBRE A ARCHIVO”);
System.out.println(“6.-SALIR”);
do{
try{
System.out.println(“INGRESE SU OPCION”);
x=Integer.parseInt(lect.readLine());
cont=1;
}catch(NumberFormatException lectura){
System.out.println(“ERROR : “+lectura.getMessage());
cont=0;
System.out.println(“REINGRESA”);
}
}while(cont==0);
}while((x5));
return(x);
}

public static void main (String abc[])throws IOException{
int opc=0;

Archivo_tarea tar = new Archivo_tarea();

do{
opc=tar.menu();

switch(opc){

case 1:
String dir;
String destino;

BufferedReader lect2 = new BufferedReader (new InputStreamReader (System.in));
System.out.println(“Ingrese destino del directorio”);
destino = (lect2.readLine());

System.out.println(“Ingrese nombre al directorio “);
dir = (lect2.readLine());

File archivo = new File (destino+dir);

if(archivo.canWrite()){

if(archivo.mkdir()){
System.out.println(“EL DIRECTORIO FUE CREADO”);
}
else
System.out.println(“No pudo ser creado”);
}
else{
System.out.println(“EL destino no puede ser escrito”);
}

break;

case 2:
String buscar;
String ruta;

BufferedReader lect3 = new BufferedReader (new InputStreamReader(System.in));

System.out.println(“Ingrese la RUTA del archivo”);
ruta = (lect3.readLine());

System.out.println(“Ingrese el nombre de un archivo”);
buscar = (lect3.readLine());

File archivoabuscar = new File(ruta+buscar);

if(archivoabuscar.exists()){
System.out.println(“El archivo existe”);
System.out.println(“Y su RUTA es :”+archivoabuscar.getAbsolutePath());
}
else{
System.out.println(“El archivo no existe”);
}
break;

case 3:
String buscardir;

BufferedReader lect4 = new BufferedReader (new InputStreamReader(System.in));
System.out.println(“Ingrese Ruta del directorio”);
buscardir=(lect4.readLine());

File archivo2 = new File(“..//”);

String[] lista=archivo2.list();

for(int i=0; i2));

if(opcionborrar==1){ //si esta realmente seguro

if(archivoborrar.exists()){
if(archivoborrar.delete()){
System.out.println(“Borrado con exito”);
}
else //sino puede ser borrado
System.out.println(“No se puede borrar el archivo intentelo de nuevo”);
} //sino existe el archivo
else{
System.out.println(“Archivo no EXISTE”);
}
}

else // sino esta seguro de borrar
break;

break;

case 5:
String cambiar;
String nombrenuevo;
String directorio;
boolean correcto;

BufferedReader lect6 = new BufferedReader (new InputStreamReader(System.in));

System.out.println(“Ingrese el directorio del archivo a cambiar”);
directorio = (lect6.readLine());

System.out.println(“Ingrese el nombre del archivo a cambiar”);
cambiar = (lect6.readLine());

File archivoacambiar = new File(directorio+cambiar);

if(archivoacambiar.exists()){
System.out.println(“Ingrese el nuevo nombre”);
nombrenuevo = (lect6.readLine());

File archivonuevo = new File(nombrenuevo);

correcto=archivoacambiar.renameTo(archivo);

if(correcto){ //******** NO SE PUEDE EJECUTAR POR ESTA LINEA

System.out.println(“CAMBIADO CON EXITO”);
}
else{

System.out.println(“NO SE PUDO CAMBIAR EL NOMBRE”);
}
}

break;

case 6:
System.out.println(“CHAOLIN”);
break;

}///////////*********************FIN SWITCH

}while(opc!=5);//*************** SE ACABA EL PROGRAMA
} //********************* FIN MAIN

}//**************************FIN CLASS Archivo_tarea

Víctor Cuervo

erny

estoy deacuerdo no importa que sistema operativo manejes recuerda la frase de java.

Víctor Cuervo

lineadecodigo

José debería de funcionar en cualquier sistema operativo que soporte la máquina virtual de Java (JVM). ¿Qué error te da? A ver si averiguamos que sucede.

Víctor Cuervo

José A. Alfaro

No funciona en Windows XP ¿Porque?

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*