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

¿es necesario un buffer para gestiona ficheros?

Estas en el tema de ¿es necesario un buffer para gestiona ficheros? en el foro de Java en Foros del Web. Buenas, acabo de comenzar a manejar ficheros en java, y tengo algunas dudas sobre su gestión. He leido varias páginas para informarte, pero todas usan ...
  #1 (permalink)  
Antiguo 22/07/2015, 11:28
 
Fecha de Ingreso: mayo-2006
Mensajes: 70
Antigüedad: 18 años, 5 meses
Puntos: 0
¿es necesario un buffer para gestiona ficheros?

Buenas,

acabo de comenzar a manejar ficheros en java, y tengo algunas dudas sobre su gestión. He leido varias páginas para informarte, pero todas usan métodos diferentes sin explicar apenas: unos usan write otrs buffer write, otros file o filewrite o printWriter. ¿Es necesario crear un buffer? porque en el siguiente ejemplo que he encontrado no, por ejemplo.


http://www.discoduroderoer.es/clases-filereader-y-filewriter-para-ficheros-de-texto-en-java/


¿sabrias algún lugar fiable donde documentarme sobre los ficheros?

También tengo una duda sobre la llamada a la funcion para escribir. Supongamos que tenemos una función escribirFichero(String t) dond t es el texto que va a incluir en el fichero. Quiero llamarlo desde una clase diferente, ¿como lo hago?, porque no es un objeto que pueda llamar. Si mi limito a escribir la función solo me dice que no está definida en dicha clase (que no es la principal, solo es una clase que tengo en mi programa).

Gracias a todos!

Última edición por samurai_7; 22/07/2015 a las 11:43 Razón: ampliacion
  #2 (permalink)  
Antiguo 22/07/2015, 12:25
 
Fecha de Ingreso: mayo-2006
Mensajes: 70
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: ¿es necesario un buffer para gestiona ficheros?

Actualmente tengo

public void fichero(){}

public void escribiFichero()
{

try {

fw = new FileWriter (ruta,true);
bw = new BufferedWriter(fw);
bw.write("\n prueba3");
bw.flush();
bw.close();

}

catch(Exception ex){ex.printStackTrace();}
}

}

y funciona. Lo hice creando una varible fichero e instanciandola en la clase donde quería llamarla. No se si es la forma mas elegante de hacerlo.
  #3 (permalink)  
Antiguo 22/07/2015, 14:05
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿es necesario un buffer para gestiona ficheros?

Hola:

En java hay muchas clases para leer y escribir en ficheros. La más básica lee o escribe bytes, sin buffer y son FileInputStream y FileOutputStream

A partir de ahí, según necesidades, hay clases que hacen más cosas. Si necesitas un Buffer, tienes clases BufferedReader y BufferedWriter, si quieres leer y escribir caracteres, FileReader y FileWriter, si quieres leer enteros, flotantes, etc, los DataInputStream y DataOuptutStream, si quieres.... en fin, un montón de clases para facilitar la lectura/escritura de tipos concretos de datos.

En cuanto al Buffer .... es más costoso, por ejemplo, leer 10 bytes de uno en uno en el disco que leer los 10 bytes de golpe. Si preves que vas a escribir/leer en el fichero con frecuencia y en cantidades pequeñas, es más eficiente usar un Buffer. Si vas a escribir/leer poco y siempre datos grandes (de muchos bytes de golpe), no es tan necesario usar el Buffer. Tu ejemplo, como quieres escribir Strings, puedes usar PrintWriter. Y este puedes configurarlo con o sin buffer

new PrintWriter (new BufferedWriter (...)); // con buffer
new PrintWriter (....); // sin buffer

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 22/07/2015, 16:10
 
Fecha de Ingreso: mayo-2006
Mensajes: 70
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: ¿es necesario un buffer para gestiona ficheros?

Muchas gracias me has aclarado cosillas, pero aparecen nuevas dudas

Entonces entiendo que el tipo de file que uses irá en función de los datos, así que en mi caso, tengo una estructura creada por mi, y quiero almacenar cada uno de estos valores, que son enteros, estring y tipos enumerados en en un fichero, todo en una linea. Se me ocurren varias opciones: hacer un casting a string con cada tipo para usar el filewriter o crear diferentes tipos de files para coger cada tipo. No se si habría algún tipo "genérico" o algo mas elegante. ¿que me aconsejarías?

Muchas gracias!
  #5 (permalink)  
Antiguo 23/07/2015, 01:02
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ¿es necesario un buffer para gestiona ficheros?

Hola:

Para guardar estructuras de datos tienes varias opciones.

Una es la que mencionas, convertir tu estructura a string, formato inventado por tí o alguno más estándar (como json o xml, con lo que tendrías la posibilidad de usar librerías ya hechas para esta conversión) y guardarlo como string. Si luego quieres leer, necesitas lo contrario, algo que de ese string te recupere tu estructura de datos.

Otra opción es escribir los atributos/campos uno a uno, con DataOuptutStream y DataInputStream. El fichero sería binario (no legible con un editor).

Finalmente, si tu clase implementa la interfaz Serializable, puedes usar ObjectInputStream y ObjectOutputStream. Particularmente no me gusta esta opción, estos Stream suelen dar problemas hasta que se controlan bien y el fichero generado es específico de java, no podrías leerlo con ningún otro lenguaje, y aparte tiende a guardar más bytes que los estrictamente necesarios para tus datos (además de tus valores, guarda también información específica de la clase, como qué clase es, cabeceras, etc, etc.). La ventaja es que una vez que controlas el asunto, es muy cómodo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 23/07/2015, 01:42
 
Fecha de Ingreso: mayo-2006
Mensajes: 70
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: ¿es necesario un buffer para gestiona ficheros?

Estupendo!! muchas gracias por tu ayuda.

te debo una cerveza! ;)

Etiquetas: buffer, clase
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 13:42.