Ver la Versión Completa : [ CONSULTA ] Leer xml y luego escribir sobre él
monchyrcg
27/03/12, 18:31:28
Buenas tardes, os cuento. Tengo un archivo en la memoria externa del teléfono y quiero leer el archivo y luego escribir al final de este archivo hago esto pero no me funciona
File ruta_sd = Environment.getExternalStorageDirectory();
File f = new File(ruta_sd.getAbsolutePath(), "zonaVuelo/sitios.xml");
BufferedReader fin = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String a = null;
a = fin.readLine();
fin.close();
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(f));
fout.write(a+"\n Texto de prueba2.");
fout.close();
Se supone que lee lo guarda en la variable "a" y luego escribo a +Texto.... no?
Pues a mi siempre me aparece esto en zonaVuelo/sitios.xml:
null
Texto de Prueba2.
No lo entiendo
monchyrcg
28/03/12, 11:11:49
SOLUCIÓN:
File ruta_sd = Environment.getExternalStorageDirectory();
File f = new File(ruta_sd.getAbsolutePath(), "zonaVuelo/sitios.xml");
BufferedReader fin = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String buffer = new String();
String leido = new String();
while((buffer = fin.readLine())!=null)
leido += buffer;
fin.close();
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(f));
fout.write(leido+"\n Texto de prueba2.");
fout.close();
monchyrcg
28/03/12, 19:28:03
Reabro el tema, lo primero muchas gracias por el consejo jmtu, sigo tu consejo.
Ahora tengo un problema mayor y es que solo me deja escribir una vez en el fichero.
La primera vez que arranco la aplicación todo me va bien luego me da una NullPointerException en esta línea:
while(!(readString = buffer.readLine()).equals("</sitios>"))
No lo entiendo. Me he dado cuenta que si reemplazo el archivo si me funciona pero de nuevo solo una vez. Alguien me ayuda por favor
Si quieres leer o escribir ficheros .xml usa la clases para eso especificamente como puede ser SAX, DOM, XMLPull y otro que se me olvida. Te recomiendo XMLPull porque es mas manejable (en mi opinión y suelen recomendar en varias páginas).
Yo si quieres te puedo ayudar con XMLPull (aunque llevo algo de tiempo sin tocarlo pero da igual). Hay que explicar muchas cosas y poner bastantes ejemplos de código y usando el formato code del foro no es muy bonito (lo que daría para que el código se resalte).
Si tienes skype, te envio un mp con mi nombre de usuario y alguna tarde hablamos y te ayudo por ahi porque me será mas cómodo o haré algún videotutorial usando XMLPull.
kriogeN
30/03/12, 22:22:02
Yo en cambio prefiero SAX, más que nada porque el manejador de ficheros XML de IOS está basado en SAX, y así me resulta muy fácil programar código a la vez en Android y iPhone.
monchyrcg
01/04/12, 11:05:40
Esto fue lo que hice con SAX.
File f = new File(Environment.getExternalStorageDirectory().get AbsolutePath(), "zonaVuelo/sitios.xml");
StringBuilder builder = new StringBuilder();
String escribir = new String();
if(f.exists() && f.canRead()){
FileInputStream fileIN = null;
try{
fileIN = new FileInputStream(f);
byte [] reader = new byte[fileIN.available()];
while(fileIN.read(reader)!= -1){ }
builder.append(new String(reader));
escribir = builder.substring(0, builder.length()-9);
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(fileIN != null){
try{
fileIN.close();
}catch(IOException ioExcep){
ioExcep.printStackTrace();
}
}
}
}
if(f.exists() && f.canRead()){
FileOutputStream fileOUT = null;
try{
fileOUT = new FileOutputStream(f);
fileOUT.write((escribir+"\n Texto de prueba2. \n </sitios>").getBytes());
}catch(Exception ex){
ex.printStackTrace();
}finally{
if(fileOUT != null){
try{
fileOUT.flush();
fileOUT.close();
}catch(IOException ioExcep){
ioExcep.printStackTrace();
}
}
}
}
monchyrcg
01/04/12, 11:06:52
El problema no era el parseo eso es fácil el problema era leer el XML varias veces. Leyendo así sí me deja y de la otra manera no.
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.