|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Leer xml y luego escribir sobre él
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
Código:
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(); Pues a mi siempre me aparece esto en zonaVuelo/sitios.xml: null Texto de Prueba2. No lo entiendo Última edición por monchyrcg Día 28/03/12 a las 19:27:42. |
|
|
|
#2
|
||||
|
||||
|
SOLUCIÓN:
Código:
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();
|
|
#3
|
||||
|
||||
|
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: Código:
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 Última edición por monchyrcg Día 28/03/12 a las 20:32:15. |
|
#4
|
||||
|
||||
|
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. |
|
#5
|
||||
|
||||
|
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.
|
| Gracias de parte de: | ||
|
#6
|
||||
|
||||
|
Esto fue lo que hice con SAX.
Código:
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "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();
}
}
}
}
|
|
#7
|
||||
|
||||
|
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.
|
![]() |
Estás aquí
|
||||||
|
||||||