Páginas: [1]
|
 |
|
Autor
|
Tema: problema al escribir datos en un fuchero (Leído 457 veces)
|
Toryas
Desconectado
Mensajes: 40
|
hola amigos miren tengo el siguiente problema que necesito hacer que cuando ingreso unos datos me los vaya guardando en un fichero en este caso un txt lo bonito es que cuendo voy ingresando los datos me los va escribiendo en el fichero, lo feo es que cuendo ingreso otro listado de datos me los va escribiendo en la smismas lineas donde estaban los datos del listado anterior  oce ala cosa es que tengo que ir ingresdando clientes y los datos los va wardando en un fichero pero quiero hacer que se vallan guardando en blokeas acia abajo pero no puedo hacerlo miren aka les dejo los codigos que llevo este es la clase para escribir import java.io.*; import java.util.Date; import java.text.DateFormat; public class EscrituraContacto { private FileWriter writer; private BufferedWriter buffer; private PrintWriter output; public void abrir() throws IOException { try { writer = new FileWriter( "clientes.txt" ); buffer = new BufferedWriter(writer); output = new PrintWriter(writer); } catch (SecurityException securityException) { System.err.println("No tiene permiso para escribir en el fichero"); throw securityException; } catch (FileNotFoundException fileException) { System.err.println("Error al crear el fichero" ); throw fileException; } }
public void escribir (String a) { if (a!=null){ output.println(a); } }
public void cerrar()throws IOException { if ( output != null ) output.close();
} } esta es de donde llamo import java.io.*; public class Taller{ public static Listas listas = new Listas(); public static BufferedReader teclado = new BufferedReader (new InputStreamReader(System.in)); public static Taller obj = new Taller(); public static byte opc = 0; public static EscrituraContacto cliente = new EscrituraContacto(); public static void main(String[] args) throws IOException{ obj.menu(); } public void menu()throws IOException{ System.out.println( "\t\t\t\t MENU PRINCIPAL\n\n"); System.out.println( "\t\t\t 1.- Ingresar Cliente\n"); System.out.println( "\t\t\t 2.- Buscar Cliente \n "); System.out.println( "\t\t\t 3.- Agregar Cliente\n "); System.out.println( "\t\t\t 4.- Modificar Cliente\n "); System.out.println( "\t\t\t 5.- Salir \n "); System.out.print("\nIngrese opcion : "); try { opc = Byte.parseByte (teclado.readLine()); }
catch (Exception e) { System.out.println("\n\nIngrese solo Numeros"); obj.menu(); } switch (opc){ case 1 : obj.menu(); break; case 2 : obj.menu(); break; case 3 :obj.agregarCliente(); obj.menu(); break; case 4 : obj.menu(); break; case 5 : System.exit(0); break; default :System.out.println("\nINGRESE UNA OPCION VALIDA"); obj.menu(); break; } } public void agregarCliente()throws IOException{ String nombre, apellido,direccion,telefono,rut; System.out.println("Ingrese Nombre"); nombre = teclado.readLine(); System.out.println("Ingrese Apellido"); apellido = teclado.readLine(); System.out.println("Ingrese rut"); rut = teclado.readLine(); System.out.println("Ingrese Direccion"); direccion = teclado.readLine(); System.out.println("Ingresar Telefono"); telefono = teclado.readLine(); listas.addCliente(new Cliente(nombre, apellido, rut,telefono, direccion)); cliente.abrir(); cliente.escribir(nombre); cliente.escribir(apellido); cliente.escribir(rut); cliente.escribir(direccion); cliente.escribir(telefono); cliente.cerrar(); }
} bueno estoy en pañales con esta cosa de java asi que nos e mucho asi que si encuentran que el codigo es algo precario nose rian XD
|
|
|
|
|
En línea
|
|
|
|
egyware
Desconectado
Mensajes: 130
|
ya entendi tu problema.  writer = new FileWriter( "clientes.txt" ); buffer = new BufferedWriter(writer); //cual s la gracia de crear un buffer si no lo vas a usar output = new PrintWriter(writer); ya ahora si. cuando tu escribes un archivo, primero la computadora lo abre pero en el principio de tal osea lo abre al principio del cuarderno(supongamos que un cuaderno es un archivo), y cada vez que lo abres, lo abres al principio, tu tienes que decirle a la computadora que tienes que abrir la ultima pagina (que esta en blanco) y ahi escribir. si no me equivoco, la clase que hace esa maravilla es la RandomAccessFile pero hay que hacerle algunas modificaciones a ella, pero te permite cambiarte a la ultima pagina, (ademas de otras cosas como leer y escribir). te la clase modificada: public class AppendFile extends java.io.RandomAccessFile { //Closeable, DataInput, DataOutput tb implementa para completar tu trabajo public AppendFile (String name, String mode) { super (name,mode);//solo son contructores no hare nada aqui } public AppendFile (File file, String mode) { super (file,mode);//solo son contructores no hare nada aqui } public void setPosFinal(){ //aqui lo que hago es posisionarme al final this.seek(this.length()); //el this es innecesario pero te lo dejo igual } } bueno si me equivoque en algo avisa pero esencia es eso, ultimamente estado solo jugando y nada de programacion  bueno espero que te aya sido te ayuda adios  aqui esta el api http://java.sun.com/j2se/1.5.0/docs/api/java/io/RandomAccessFile.html
|
|
|
|
« Última modificación: 23 Octubre 2007, 17:18 por egyware »
|
En línea
|
|
|
|
Toryas
Desconectado
Mensajes: 40
|
hola bueno trate d eimplementar lo que me pusiste pero no pude  XD weno trate de hacer que al abrir el archivo me lo obriera en el final pero no pude segun la api al usar el metodo seek tengo que darle como parametro la posicion final pero no se como hacer para darle dicha posicion en esta linea: this.seek(this.length()); me da error en el length() bueno cre que es lo mas practico lo de agregar al metodo abrir que se se ubike en el final del archivo pero no cacho como hacerlo slaudos y gracias
|
|
|
|
|
En línea
|
|
|
|
egyware
Desconectado
Mensajes: 130
|
mmmmmm????? creo que me falto algo...  public void seek(long pos) throws IOException
esta cita es del api de java lo que dice que el codigo debe estar vigilado por try y cacth al lo que te deje modifica el metodo asi import java.io.*; //... public void setPosFinal(){ try { seek(length()); } catch (IOException e){ e.printStackTrace();//opcional } } //... o import java.io.*; //... public void setPosFinal() throws IOException{ seek(length()); } //... pero la segunda opcion cada vez que uses setPosFinal() tendras que vigilar el codigo con try y catch /**el this porsia es una referencia al mismo objeto*/ espero que sea ese el problema con las excepciones porque no se me ocurre pero voy a revisar mi codigo para ver que falla (de hace ya un tiempecito que no programo  ,  )
|
|
|
|
« Última modificación: 23 Octubre 2007, 17:34 por egyware »
|
En línea
|
|
|
|
Toryas
Desconectado
Mensajes: 40
|
jaja bueno bueno que metodo pa poner en la ultima fila ni nada pero me percatede un erro que tenia ne el codigo bastante tonto fui pero bueno toy en etapa de aprendizage miren este era el problema en esta parte de la clase escrtura: public void abrir() throws IOException { try { writer = new FileWriter( "clientes.txt" ); buffer = new BufferedWriter(writer); output = new PrintWriter(writer); } tansolo era agregar 5 caracteres XD y tenia que dejar esta linea asi: writer = new FileWriter( "clientes.txt",true ); tonto no ?XD weno lo que estaba hciendo era siempre generar un archivo en vez de ocupar el que ya tenia wneo gracias por la ayuda
|
|
|
|
|
En línea
|
|
|
|
marioly
Desconectado
Mensajes: 239
http://marioly.hackerss.com
|
tansolo era agregar 5 caracteres XD Asi es, FileWriter tiene un constructor sobrecargado donde el segundo parametro indica si es append, por default ponen esto a false para que actue como truncate, siempre checa la documentacion de sun, alli vienen los parametros y metodos sobrecargados, o en algunos ide's te son indicados al vuelo 
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|