使用DOM解析器读取和写入内部android xml文件

时间:2013-04-24 09:39:16

标签: android xml

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

3 个答案:

答案 0 :(得分:0)

您无法修改或更新raw/xml文件目录。 Android /res目录为只读。因此,您只能从中读取文件而不允许回写。 (由于Android .apk文件具有只读权限)

答案 1 :(得分:0)

存储在Android app.u的cant modify中的xml folder xml需要copy该文件,同时在设备上安装应用到sdcard/internal storage并修改它。在这种情况下你可以使用Dom Parser从设备的sdcard /内部存储器读取和写入xml文件。

答案 2 :(得分: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", "" );
  }