2013-04-24 65 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", ""); 
    }