Java - reescribir un fichero de texto

 
Vista:
sin imagen de perfil

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
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:reescribir un fichero de texto

Publicado por Tom (1831 intervenciones) el 13/04/2010 17:34:11
No está muy claro de dónde sale la variable "linea" en el método escribir() ...

(me gusta más el bucle: for(String linea : al) { ... } :))

Deberías hacer flush() y close() de pw en el método escribir() ...


Por cierto, recibir es con B, mensaje con J y hechas (de hacer, no de echar) es con H.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:reescribir un fichero de texto

Publicado por chopaqui (29 intervenciones) el 13/04/2010 17:56:26
gracias, lo he cambiado un poquito para ir viendolo poco a poco, flush que hace,
ahora me da un error al cerrar el fichero
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)
{
i++;
codigos.add(linea);
}

f.close();//cierra el fichero

FileWriter escri = new FileWriter("c:/validos/"+fichero);//crea un objeto de la clase FileWriter
BufferedWriter bw = new BufferedWriter(escri);
for(i = 0; i < codigos.size(); i++)
{
linea = codigos.get(i);//asocia a linea el elemento correspondiente al arraylist
bw.write(linea);
}
escri.close();
bw.close();
}catch (Throwable e){

JOptionPane.showMessageDialog(null,"Error al cerrar el fichero","Error",JOptionPane.ERROR_MESSAGE);//muestra un mensage de error
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:reescribir un fichero de texto

Publicado por Tom (1831 intervenciones) el 13/04/2010 18:25:59
http://www.javadb.com/write-to-file-using-bufferedwriter
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar