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

Un par de dudas con ficheros

Estas en el tema de Un par de dudas con ficheros en el foro de Java en Foros del Web. estoy trabajamdo con ficheros (RandomAccessFile) en una aplicación, pero me ha surgido una duda al guardar Strings uso writeUTF(); que usa 2 bytes para indicar ...
  #1 (permalink)  
Antiguo 18/08/2004, 06:14
 
Fecha de Ingreso: junio-2002
Ubicación: España
Mensajes: 348
Antigüedad: 21 años, 10 meses
Puntos: 8
Un par de dudas con ficheros

estoy trabajamdo con ficheros (RandomAccessFile) en una aplicación, pero me ha surgido una duda
al guardar Strings uso writeUTF(); que usa 2 bytes para indicar el numero de bytes que usa la cadena
mas los bytes que formen dicha cadena.
El problema surge cuando a la hora de saltar los registros debo saber los bytes de la cadena pero es imposible
ya que eso depende del usuario.
Me gustaria saber si hay otro método que usa un número determinado de bytes o alguna forma para saber cuanto ocupa cada registro.
Por si no me he explicado claramente pongo parte de código:

ESCRIBIR EN EL FICHERO:
Código:
RandomAccessFile salida=new RandomAccessFile("Fichero.txt","rw");
salida.seek(salida.length());

System.out.println("Introduce el titulo: ");
salida.writeUTF(leer.readLine());
System.out.println("Introduce volumen: ");
salida.writeInt(ut.leerEntero());
System.out.println("Dia de la fecha");
salida.writeInt(validarDia(ut.leerEntero()));
System.out.println("Mes de la fecha");
salida.writeInt(validarMes(ut.leerEntero()));
System.out.println("Año de la fecha");
salida.writeInt(validarAnio(ut.leerEntero()));
System.out.println("Materia");
salida.writeUTF(leer.readLine());
LEER:
Código:
RandomAccessFile entrada=new RandomAccessFile("Fichero.txt","r");
boolean seguir=true;
int i=0;
while (seguir){
		try{
			System.out.println(entrada.readUTF());
			System.out.println(entrada.readInt());
			System.out.println(entrada.readInt());
			System.out.println(entrada.readInt());
			System.out.println(entrada.readInt());
			System.out.println(entrada.readUTF());
			i++;
			entrada.seek(i*???????);
		}catch(EOFException e){
			seguir=false;
		}
Y ya que estamos....¿Hay otra forma de preguntar por el final del fichero sin el catch, como en C, preguntando por EOF?

Saludos
  #2 (permalink)  
Antiguo 18/08/2004, 16:19
Avatar de kittya  
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 20 años
Puntos: 0
si hay un fin de archivo EOF manda un -1
un while (mientras sea !=-1)

a eso te refieres???


por que no lo haces de otra manera con un inputstream o un con un BufferedReader o = new BufferedReader( new FileReader(archivo));

creo que es mas facil y tambien podrias hacer lo que quieres no????
  #3 (permalink)  
Antiguo 20/08/2004, 15:02
 
Fecha de Ingreso: junio-2002
Ubicación: España
Mensajes: 348
Antigüedad: 21 años, 10 meses
Puntos: 8
oie kittya, me podrias decir algun sitio donde encontrar ejemplos con esa forma de hacer el stream. si no me podias poner tu lo basico, crear el stream, leer y escribir en el.
Gracias de todas formas

Saludos
  #4 (permalink)  
Antiguo 20/08/2004, 15:52
Avatar de kittya  
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 20 años
Puntos: 0
Cita:
Iniciado por ZeroZ
oie kittya, me podrias decir algun sitio donde encontrar ejemplos con esa forma de hacer el stream. si no me podias poner tu lo basico, crear el stream, leer y escribir en el.
Gracias de todas formas

Saludos
espero te sirva
este es con burreredreader
try {
String archivo = "Jnior.txt",s,nom,ips;
BufferedReader sarchivo = new BufferedReader(
new FileReader(archivo));
int i=0;
while (( s = sarchivo.readLine()) != null){
// aqui leees toda una linea de codigo

}
}
} catch (IOException error) {
JOptionPane.showMessageDialog(this, error, "Error",
JOptionPane.ERROR_MESSAGE);
}


asi escribes

FileWriter fw = new FileWriter("arch.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter salida = new PrintWriter(bw);
bw = new BufferedWriter(new FileWriter("arch.txt"));
salida = new PrintWriter(bw); salida.print(algo + " ");


// este con un input stream

InputStream is= this.getClass().getResourceAsStream("/prueba.txt");
try
{
if(is != null)
{
String str =""; String ss="";
int ch,i=0,l=0,ban1=0,ban2=0;
while( ( ch = is.read() ) != -1 )
{
ss=ss+String.valueOf((char) ch);
}
}
else
si.setText("no hay archivo");
}catch(ConnectionNotFoundException error)


la escritura con un outputstream
os.write();



a mi me parece mas facil la primera opcion el bufferedreader y writer

Última edición por kittya; 20/08/2004 a las 16:04
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 07:16.