2013-04-24 66 views
0

我是Android新手我正在尝试从Android和xml文件读取和写入一些信息。我认为如果我使用DOM解析器来做这种事情是可能的......我在应用程序的开始处读取文件以获取数据并在应用程序终止之前尝试保存以存储配置更改。我想出了如何从raw/xml读取文件,但它似乎是一个真正的痛苦(甚至不可能)将修改后的xml保存在这里... 也许我采取错误的方法,但我相信它应该有可能以某种方式在Android中修改一些内部xml文件。如何去做呢?使用DOM解析器读取和写入内部android xml文件

回答

0

您不能修改或更新raw/xml文件目录。 Android /res目录是只读。所以你只能从它读取文件而不允许回写。 (由于Android .apk文件具有只读权限)

+0

我预料到......有另一种方式来存储在Android的xml文件内部,仍然有对写入权限或者它只是不可能的,我必须访问某些外部XML文件(例如通过网络)来做到这一点? – user2183977 2013-04-24 09:49:51

+0

您可以在路径'/ data/data/<软件包名称>/files'中将它存储在设备空间的应用程序内部存储器中。在应用程序中,您可以使用'getFilesDir();' – user370305 2013-04-24 09:51:52

+0

获取此路径请查看http://developer.android.com/guide/topics/data/data-data-storage.html#files内部 – user370305 2013-04-24 09:54:14

0

ü存储在机器人app.u需要xml foldercopy该文件,而安装在设备上的应用程序,以sdcard/internal storage和修改it.In这种情况下,U可以使用DOM解析器读取和SD卡从/内部存储编写XML文件cant modify XML的设备。

0

@ user370305是对的!

简单的逻辑是,你不能在运行时在存储器(原始资产,资产,布局等)内部创建一个文件。因此你可以通过授予“write_external_storage”权限在外部创建一个不同的文件。然后你可以阅读或写作。

下面是一个例子

public void readXML() throws IOException{ 

     //get the xml file from the raw folder 
     InputStream is = getResources().openRawResource(
        R.raw. config); 

     Resources r = getResources(); 
     AssetManager assetManager = r .getAssets(); 

     //then write the dummy file 
     File f = new File(Environment.getExternalStorageDirectory(), "dummy.xml"); 
     OutputStream os = new FileOutputStream(f , true); 



     final int buffer_size = 1024 * 1024; 
     try 
     { 
      byte [] bytes = new byte [buffer_size ]; 
      for (;;) 
      { 
       int count = is.read(bytes, 0, buffer_size); 
       if (count == -1) 
        break ; 
       os.write(bytes , 0, count); 
      } 
      is.close(); 
      os.close(); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 


     //then parse it 
        parseConfigXML(f); 

    } 

    public String parseConfigXML(File configXML) { 

     XmlPullParser xpp = null ; 
     String httpUrl= ""; 
     FileInputStream fis ; 
     XmlPullParserFactory factory = null ; 
     try { 

       fis = new FileInputStream(configXML); 
       factory = XmlPullParserFactory.newInstance(); 
       factory .setNamespaceAware(true); 
       xpp = factory .newPullParser(); 
       xpp .setInput(new InputStreamReader(fis)); 

       int eventType = xpp.getEventType(); 
       while (eventType != XmlPullParser. END_DOCUMENT) { 
        if (eventType == XmlPullParser. START_DOCUMENT) { 

        } else if (eventType == XmlPullParser. START_TAG) { 

        } else if (eventType == XmlPullParser. END_TAG) { 

        } else if (eventType == XmlPullParser. TEXT) { 

          httpUrl += xpp .getText().replace("\n", ""); 

        } 
        eventType = xpp .next(); 
       } 
     } catch (FileNotFoundException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
     } catch (XmlPullParserException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } 

     return httpUrl .trim().replace("\n", ""); 
    }