Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用DOM解析器读取和写入内部android xml文件_Android_Xml - Fatal编程技术网

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

使用DOM解析器读取和写入内部android xml文件,android,xml,Android,Xml,我是Android新手,我正在尝试在Android中从xml文件读写一些信息。我想如果我使用DOM解析器来做这些事情是可能的。。。我在应用程序运行时读取文件以获取数据,并试图在应用程序终止以存储配置更改之前进行保存。我知道了如何从raw/xml读取文件,但在这里保存修改后的xml似乎真的很痛苦(甚至不可能)。。。 也许我采取了错误的方法,但我相信应该可以在Android中以某种方式修改一些内部xml文件。如何操作?您不能修改或更新raw/xml文件目录。Android的/res目录是只读的。所以

我是Android新手,我正在尝试在Android中从xml文件读写一些信息。我想如果我使用DOM解析器来做这些事情是可能的。。。我在应用程序运行时读取文件以获取数据,并试图在应用程序终止以存储配置更改之前进行保存。我知道了如何从raw/xml读取文件,但在这里保存修改后的xml似乎真的很痛苦(甚至不可能)。。。
也许我采取了错误的方法,但我相信应该可以在Android中以某种方式修改一些内部xml文件。如何操作?

您不能修改或更新
raw/xml
文件目录。Android的
/res
目录是只读的。所以您只能从中读取文件,不允许写回。(因为Android.apk文件具有只读权限)

u
无法修改android应用程序的
xml文件夹中存储的
xml。在设备上安装应用程序时,您需要
将该文件复制到
SD卡/内部存储
并对其进行修改。在这种情况下,您可以使用Dom解析器从SD卡/设备内部存储读取和写入xml文件。

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

这里有一个例子

   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", "" );
  }

我期待着那个。。。有没有其他方法可以在Android内部存储xml文件,并且仍然拥有写入权限,或者这是不可能的,我必须访问一些外部xml文件(例如通过网络)才能做到这一点?您可以将其存储在设备空间的应用程序内部存储中,路径
/data/data//files
。在应用程序中,您可以使用
getFilesDir()获取此路径查看