Foros del Web » Programación para mayores de 30 ;) » Java »

Problema escribiendo en fichero

Estas en el tema de Problema escribiendo en fichero en el foro de Java en Foros del Web. Hola a tod@s! Me hubiera gustado estrenarme en este foro respondiendo a alguna duda pero me temo que no va a ser asi. Llevo un ...
  #1 (permalink)  
Antiguo 12/11/2010, 05:19
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Problema escribiendo en fichero

Hola a tod@s!
Me hubiera gustado estrenarme en este foro respondiendo a alguna duda pero me temo que no va a ser asi.

Llevo un par de días peleándome con la lectura - escritura de fichers en Java y he llegado a un punto en el que veo que no avanzo. La cuestión es que para ctualizar los datos de un fichero de texto intento guardar el contenido modificado en un BufferedWriter y después volcarlo sobreescribiendo lo anterior.

Esta es parte del código de la función:
Código:
private Integer operar(String clave, boolean incremento) {
		Integer visitas = 0;
		String linea;
		StringTokenizer palabra = null;
		boolean existe = false;
		try {
			abrir();
		
			if (fichLectura.ready()) {
				log4j.info("P1.1.1");
				while (((linea = fichLectura.readLine()) != null) && (existe == false)) {
					log4j.info("P1.While");
					if (linea.startsWith(clave)) {
						existe = true;
						log4j.info("P1.While-if");
						palabra = new StringTokenizer(linea, "");
						palabra.nextToken();
						visitas = Integer.parseInt(palabra.nextToken().trim());
						if (incremento){
							log4j.info("P2.While-if - visitas: " + visitas);
							visitas++;
							fichEscritura.append(clave + " " + visitas + "\n");
							log4j.info("P2.While-if - visitas: " + visitas);
						}
					} else {
						fichEscritura.append(linea + "\n");
					}
				}
			} 
			if (existe == false){
				log4j.info("P1.2.1 - Nuevo registro");
				fichEscritura.append(clave + " 0" + "\n");
			}
		} catch (IOException e) {
			log4j.error("Error de entrada-salida", e);
		} catch (Exception e) {
			log4j.error("ERROR", e);
		} finally {
			try {
				cerrar();
			} catch (IOException e) {e.printStackTrace();}
		}
		return visitas;
	}
Según los resultados y las trazas de log, fichLectura.ready() SIEMPRE devuelve false, y no logro averiguar porqué, anteriormente utilizando un FileWriter no me pasaba pero tampoco podía modificar adecuandamente el fichero ya que necesito escribir entremedias.
La función abrir, crea los nuevos canales de lectura-escritura y la función close hace flush() de FichEscritura y cierra ambos canales.

A ver si alguien me puede ayudar.Gracias de antemano!
  #2 (permalink)  
Antiguo 12/11/2010, 07:30
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema escribiendo en fichero

Update:

El tema parece ser que al crear el nuevo FileWriter podemos escoger si se sobreescribe o se concatena lo que escribimos;

1.- new FileWriter("c:\\Contadores.dat", false) --> problema anterior, fichLectura.ready() SIEMPRE devuelve false

2.- new FileWriter("c:\\Contadores.dat", true) --> va concatenando correctamente, sin embargo, a mi no me interesa concatenar!!

Parece ser que al abrir el fichero con la opcion 1 borra todo el contenido, cual sería la solución para que no lo borre hasta que querramos escribir?? probaré creando el nuevo FileWriter lo mas tarde posible pero no me convence mucho la idea...

P.D.: He borrado "&& (existe == false)" del while para que guarde todas las filas en el buffer
  #3 (permalink)  
Antiguo 15/11/2010, 05:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problema escribiendo en fichero

Bueno pues ya he encontrado la solución, el problema era que para cuando quería leer del fichero anteriormente escrito, lo borraba al abrir, asi que la solución es utilizar dos ficheros.

Me he encontrado con otro problema ya que la función "renameTo" de File funciona un poco como quiere asi que finalmente he tenido que echar mano de la función "transferTo" de la clase FileChannel.

Espero que esto le sirva a alguien.

Etiquetas: escribir, fichero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:18.