0

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

4

3 回答 3

0

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

于 2013-04-24T09:45:32.830 回答
0

u cant modifyxml 存储在android app.u在设备上安装应用程序时xml folder需要该文件并对其进行修改。在这种情况下,您可以使用 Dom Parser 从设备的 sdcard/内部存储读取和写入 xml 文件。copysdcard/internal storage

于 2013-04-24T09:52:48.460 回答
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", "" );
  }
于 2014-11-14T17:14:23.767 回答