Problemas con escritura ficheros Java

Estoy haciendo un programa Java y tengo un archivo de configuración donde incremento 2 contadores que me hacen falta para la aplicación, te pongo la clase:

Y el contenido del archivo incrementos.cfg:

Pues resulta que a veces cuando invoco al método "setContadorA" para que modifique el valor de la variable contadorA no lo hace. Supóngase que la variable contadorA del archivo incrementos. Cfg tiene el valor 1, pues cuando invoco al método y hago setContadorA(5) no modifica el valor por 5. No salta ninguna excepción, todo OK, pero no cambia el valor.

¿Por qué no cambia el valor?

¿Cómo podría saber si el archivo está siendo usado por otro método?

¿Cómo podría saber si el archivo está bloqueado?

Respuesta
1

La verdad es que es bastante extraño que el valor no cambie. Me parecen interesantes las preguntas que planteabas:

- ¿Cómo podría saber si el archivo está siendo usado por otro método?

¿Estamos hablando de un programa multihilo?. ¿Estás llamando a GrabadoFicheros desde hilos diferentes?. Si no es multihilo, no debería haber más métodos utilizándolo.

- ¿Cómo podría saber si el archivo está bloqueado?

La gran mayoría de APIs y entiendo que esta también, deberían lanzar una excepción en ese caso. Si la escritura no se puede realizar, debería fallar, de la misma manera que fallaría si el fichero no existiera.

- ¿Por qué no cambia el valor?

Esta es la más difícil. En ocasiones, las APIs que escriben a fichero no escriben inmediatamente por un tema de rendimiento. Como escribir en disco es costoso, realizan la actualización del fichero de manera diferida, cuando lo consideran oportuno. Podrías investigar si HierarchicalINIConfiguration tiene algún método que fuerce la escritura en ese momento. Normalmente, estás cosas van asociadas al término "Flush".

4 respuestas más de otros expertos

Respuesta
1

Como bien dejas caer con una de tus preguntas, ya sabes que lo más probable es que tu método setContadorA sea utilizado en algún otro sitio. Esto es claro deducirlo al denotar por tus palabras que el setContadorB siempre funciona.

Por resumirte problemas típicos, dado que sin la totalidad del código, apenas puedo hacer más que imaginar que te pasa, los problemas pueden seR:

-Si solo le pasa al setContadorA, deberías de hacer una prueba intrusiva muy rudimentaria. Esto es, haz un println dentro del método que escriba cualquier mensaje por consola, de este modo podrás intuir si es utilizado el método más veces de las que quisieras.

-Otro problema muy probable, por no decir el más normal, es el tema de la persistencia de los datos. Por lo que veo estas haciendo una verdadera "chapuzada" en el sentido que estas accediendo a un archivo de configuración de texto [benditas bases de datos] desde varios puntos del programa. Es decir, ya solo viendo que tus dos métodos pueden acceder a un mismo archivo, debería hacerte saltar las alarmas.

Muy probablemente estos accesos, no sean controlados con algún semáforo o elemento de control similar, y habrá un problema de que cuando uno de los métodos trabaja con el fichero el otro no puede trabajar o lo hace de forma incorrecta.

Como ves solo te he docmentado dos cosas por hacer, pero podrían ser miles de cosas. Espero haber acertado, pero como te digo, sin el código completo, poco umás puedo hacer. Ya me dirás.

Respuesta
-1

Bueno lo mejor para todas estas cosas, es meter paradas, para probar cosas y también se suele meter un showmessagedialog o algo así para ver si pasa o no por donde quieras son pequeños trucos.

El código no se si esta completo o no pero ahí no veo nada.

Hola, muchas gracias, ¿podrías explicarme lo del showmessagedialog?

Bueno yo me refiero a que para ver si entra algo en un código pones un mensaje y ya esta solo para ver si entra o no, a cierta parte del código son mini trucos.

De acuerdo, pero no es lo que yo estaba preguntando:

¿Por qué no cambia el valor?
¿Cómo podría saber si el archivo está siendo usado por otro método?
¿Cómo podría saber si el archivo está bloqueado?

Vuelvo a repetirte que para ello tienes que hacer paradas, en el código, para mirar como se comporta de esa forma ves por donde va el código e incluso puedes ver el valor de cualquier cosas y ves si se modifica o no.

Respuesta
-1

Lamento no poder ayudarte en temas de código no tengo ni idea

Respuesta
-1

Desafortunadamente, esta pregunta va a en el apartado de programación, software y aplicaciones es ya después que un programa esta programado.

Y lamentablemente no soy programador. Pero haz la pregunta en el apartado correcto y seguro habrá algún programador que te ayude.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas