elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Modificar archivos txt en j2me
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Modificar archivos txt en j2me  (Leído 6,012 veces)
dark33

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Modificar archivos txt en j2me
« en: 22 Octubre 2010, 05:09 am »

Hola a todos. Estoy haciendo una aplicacion que permite modificar un archivo txt. La idea es que si por ejemplo el archivo txt existe en el celular pueda agregar una nueva linea al final de la ultima masomenos asi:

archivo txt actual:

linea1
linea2
linea3

Agrego una nueva linea4 al archivo txt

linea1
linea2
linea3
linea4

Eh intentado agregar pero se me sobrescribe la primera linea.Luego intente con \r\n y me sale el simbolo '?' al final de la linea. Una solucion que habia planteado era leer primero todo el archivo txt y luego recuperar todos los datos como string en una variable "datos" de tipo string.Posteriormente sumar el string que quiero agregar como linea osea "datos"+"linea4" y para que se vaya abajo le aumente \r\n ,asi ,"datos"+"\r\n"+"linea4. Me funciono en parte.Pero cada vez que hago una escritura, la linea se le agrega el simbolo '?' al final.

El codigo es el siguiente:

Código
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.io.PrintStream;
  5. import javax.microedition.io.Connector;
  6. import javax.microedition.io.file.FileConnection;
  7. public class writeMemory{
  8.    private String url;
  9.    private FileConnection fc;
  10.    private OutputStream os;
  11.    private String data;
  12.    private PrintStream ps;
  13.    public writeMemory(String vurl){
  14.        url=vurl;
  15.    }
  16.  
  17.    public void write(String vdata){
  18.        data=vdata;
  19.        new Thread(new Runnable() {
  20.            public void run() {
  21.                try {
  22.                    fc = (FileConnection) Connector.open(url);
  23.                    if (!fc.exists()) {
  24.                       fc.create();  
  25.                    }
  26.                    os = fc.openOutputStream();
  27.                    String datos="";
  28.                    InputStream fis = fc.openInputStream();
  29.                    int value=0;
  30.                    while((value=fis.read())!=-1){
  31.                        System.out.print((char)value);
  32.                        datos=datos+(char)value;
  33.                     }
  34.                    System.out.println((char)value);
  35.                    datos=datos+(char)value;
  36.                    fis.close();
  37.                    ps = new PrintStream(os);
  38.                    ps.print(datos+"\r\n"+data);
  39.                    ps.flush();
  40.                    ps.close();    
  41.                    fc.close();    
  42.                } catch (IOException ex) {
  43.                    ex.printStackTrace();
  44.                }
  45.            }
  46.        }).start();
  47.    }
  48. }
  49.  
Espero que me puedan ayudar.Desde ya muchas gracias.







« Última modificación: 22 Octubre 2010, 08:40 am por dark33 » En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Modificar archivos txt en j2me
« Respuesta #1 en: 22 Octubre 2010, 05:20 am »

Hola, no conozco mucho de Java, pero te digo lo siguiente:

1) Todo código debe estar dentro de [code=java][/code].
2) NUNCA anides Try-Catch, con uno solo es suficiente, y en tal caso puedes validar por errores, lo cual es recomendable.
3) Revisa la documentación sobre el PrintStream.
4) En esta parte:
Código
  1. public void write(String vdata){
  2.        data=vdata;
  3.  
No lo debes hacer así, puedes usar el mismo vdata.
5) No se porqué estas usando un subproceso.
6) No estás validando Race Conditions y ni todo lo referente a multi-threading.

Un saludo.


En línea

dark33

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar archivos txt en j2me
« Respuesta #2 en: 22 Octubre 2010, 05:41 am »

Hola D4N93R. Use varios Try-Catch para poder hacer pruebas nómas =). Por otra parte al hilo lo puse porque  supuestamente se puede producir un dead lock que hasta ahora no me paso. Teniendo el hilo no me deja usar el vdata directamente salvo que sea un final.
Saludos.
« Última modificación: 22 Octubre 2010, 08:40 am por dark33 » En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Modificar archivos txt en j2me
« Respuesta #3 en: 22 Octubre 2010, 05:56 am »

Si estás haciendo pruebas, instancia la clase y llama a ese método varias veces, y usa alguna forma de identificar cada vuelta para que se te haga más fácil la depuración. Con respecto a escribir al final del archivo, creo que hay una clase que se llama FileWriter, en el constructor hay un parámetro que se llama append, le pass true.

Un saludo!
En línea

dark33

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar archivos txt en j2me
« Respuesta #4 en: 22 Octubre 2010, 06:03 am »

Hola de nuevo.Efectivamente si hay una clase FileWriter pero es para la plataforma Java y no esta disponible para J2ME  :-[. Asi que no me quedo otra que utilizar la interfaz FileConnection.
Saludos.
.
« Última modificación: 22 Octubre 2010, 08:41 am por dark33 » En línea

dark33

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Modificar archivos txt en j2me
« Respuesta #5 en: 22 Octubre 2010, 08:18 am »

Hola a todos.Despues de lidiar con esto pude solucionar el problema de que aparezcan el caracter '?' y el otro simbolo parecido a este '□'. Al hacer  datos=datos+(char)value se adjuntaba el simbolo '?' al string datos ya que este siempre aparece al final de la ultima linea. Tambien al hacer por ejemplo ps.println(texto) se escribia el simbolo '□'.La linea  datos=datos+(char)value; del codigo anterior ya no iria ya que era la que adjuntaba el simbolo '?' y se utiliza el metodo print y no println de la clase PrintStream .
 
Código
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.io.PrintStream;
  5. import javax.microedition.io.Connector;
  6. import javax.microedition.io.file.FileConnection;
  7. public class writeMemory{
  8.    private String url;
  9.    private FileConnection fc;
  10.    private OutputStream os;
  11.    private String data;
  12.    private PrintStream ps;
  13.    public writeMemory(String vurl){
  14.        url=vurl;
  15.    }
  16.  
  17.    public void write(String vdata){
  18.        data=vdata;
  19.        new Thread(new Runnable() {
  20.            public void run() {
  21.                try {
  22.                    fc = (FileConnection) Connector.open(url);
  23.                    if (!fc.exists()) {
  24.                        fc.create();
  25.                    }
  26.                    os = fc.openOutputStream();
  27.                    String datos="";
  28.                    InputStream fis = fc.openInputStream();
  29.                    int value=0;
  30.                    while((value=fis.read())!=-1){
  31.                        System.out.print((char)value);
  32.                        datos=datos+(char)value;
  33.                     }
  34.                    System.out.println((char)value);
  35.                    ps = new PrintStream(os);
  36.                    ps.print(datos+"\r\n"+data);
  37.                    ps.close();
  38.                    fis.close();
  39.                    fc.close();
  40.                } catch (IOException ex) {
  41.                    ex.printStackTrace();
  42.                }
  43.            }
  44.        }).start();
  45.    }
  46. }
  47.  
.
Si bien funciona bien el codigo me gustaria una mejor solucion mas optmizada puesto que esta aplicacion se ejecuta sobre un celular y ademas por cada escritura que se hace se necesita recuperar los datos del txt y concatenarle la nueva linea. Lo mejor seria posicionarse en la ultima linea y hacer un retorno de carro y escribir la nueva linea directamnete. Esto no lo pude conseguir con J2ME.
Saludos.
« Última modificación: 22 Octubre 2010, 08:40 am por dark33 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines