
reescribir un fichero de texto
Publicado por reescribir un fichero de texto (29 intervenciones) el 13/04/2010 13:49:45
hola, acabo de empezar a trabajar en java y tengo que crear una visual class que recoja el nombre de un fichero de texto y lo reescriba sin lineas repetidas, cada linea tiene un codigo que son los 13 primeros caracteres(estos son los que hay que comparar), lo he dividido en dos métodos uno que recoge el fichero de texto y lo lee linea a linea y si esta repetida no hace nada y si no lo esta la mete en un arraylist, y al final del método llama a otro metodo que recive el arraylist y lo escribe en el fichero de salida.
cuando lo ejecuto la primera vez que pulso el botón no hace nada y la segunda me lo escribe vacio por favor ayudadme lo necesito, paso las dos funciones echas por mi muchas gracias.
private void comparar()
{
fichero = campo_nombre.getText();//asocia a la variable fichero lo escrito en el campo de texto
ArrayList <String> codigos = new ArrayList <String>();//crea un arraylist de cadenas de texto
try
{
FileReader f = new FileReader(fichero);//crea un objeto de la clase FileReader para leer el fichero
BufferedReader bf = new BufferedReader(f);//crea un objeto de la clase BufferedReader
while((linea = bf.readLine()) != null)//recorre el fichero
{
if(i == 0)
{
codigos.add(linea);//añade la primera linea
i++;//incrementa la i
}
else{
for(i = 1;i <= codigos.size(); i++)//recorre el arraylist
{
linea2 = codigos.get(i);//asocia a linea2 el elemento del array
linea2 = linea2.substring(0,13);//coge los trece primeros caracteres de linea2
if(!linea2.equals(linea.substring(0,13)))//comprueba que no sean iguales las dos cadenas de texto
{
codigos.add(linea);//añade la linea al arraylist
}
}
}
}
escribir(codigos, fichero);//llama a al método escribir
f.close();//cierra el fichero
} catch (FileNotFoundException e1)
{
JOptionPane.showMessageDialog(null,"No se puede encontrar el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
catch (IOException e1)
{
JOptionPane.showMessageDialog(null,"Error al leer el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
}
private void escribir (ArrayList<String> al, String nombre)//método que escribe en el array en el fichero de salida
{
try
{
FileWriter fichero = new FileWriter("c:/validos/"+nombre);//crea un objeto de la clase FileWriter
PrintWriter pw = new PrintWriter(fichero);//crea un objeto de la clase PrintWriter
for(i = 0; i < al.size(); i++)
{
linea = al.get(i);//asocia a linea el elemento correspondiente al arraylist
pw.println(linea);//escribe la linea
}
} catch (IOException e)
{
JOptionPane.showMessageDialog(null,"Error al escribir el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
} catch (Throwable e) {
JOptionPane.showMessageDialog(null,"Error al cerrar el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
}
}
cuando lo ejecuto la primera vez que pulso el botón no hace nada y la segunda me lo escribe vacio por favor ayudadme lo necesito, paso las dos funciones echas por mi muchas gracias.
private void comparar()
{
fichero = campo_nombre.getText();//asocia a la variable fichero lo escrito en el campo de texto
ArrayList <String> codigos = new ArrayList <String>();//crea un arraylist de cadenas de texto
try
{
FileReader f = new FileReader(fichero);//crea un objeto de la clase FileReader para leer el fichero
BufferedReader bf = new BufferedReader(f);//crea un objeto de la clase BufferedReader
while((linea = bf.readLine()) != null)//recorre el fichero
{
if(i == 0)
{
codigos.add(linea);//añade la primera linea
i++;//incrementa la i
}
else{
for(i = 1;i <= codigos.size(); i++)//recorre el arraylist
{
linea2 = codigos.get(i);//asocia a linea2 el elemento del array
linea2 = linea2.substring(0,13);//coge los trece primeros caracteres de linea2
if(!linea2.equals(linea.substring(0,13)))//comprueba que no sean iguales las dos cadenas de texto
{
codigos.add(linea);//añade la linea al arraylist
}
}
}
}
escribir(codigos, fichero);//llama a al método escribir
f.close();//cierra el fichero
} catch (FileNotFoundException e1)
{
JOptionPane.showMessageDialog(null,"No se puede encontrar el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
catch (IOException e1)
{
JOptionPane.showMessageDialog(null,"Error al leer el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
}
private void escribir (ArrayList<String> al, String nombre)//método que escribe en el array en el fichero de salida
{
try
{
FileWriter fichero = new FileWriter("c:/validos/"+nombre);//crea un objeto de la clase FileWriter
PrintWriter pw = new PrintWriter(fichero);//crea un objeto de la clase PrintWriter
for(i = 0; i < al.size(); i++)
{
linea = al.get(i);//asocia a linea el elemento correspondiente al arraylist
pw.println(linea);//escribe la linea
}
} catch (IOException e)
{
JOptionPane.showMessageDialog(null,"Error al escribir el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
} catch (Throwable e) {
JOptionPane.showMessageDialog(null,"Error al cerrar el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
}
}
Valora esta pregunta


0