2012-10-04 19 views
3
  • 我在ASSETS目錄下有一個xml文件(com.android.project \ assets \ xml \ file.xml)。
  • 我想調用一個(下面)函數來讀取xml文件並以String的形式返回內容。
  • 該功能要求文件的path作爲字符串。我不知道如何將文件的路徑作爲字符串。如果文件位於資產目錄下,如何獲取文件名作爲字符串?

    private String getXML(String path){ 
    
        String xmlString = null; 
    
        AssetManager am = this.getAssets(); 
        try { 
        InputStream is = am.open(path); 
        int length = is.available(); 
        byte[] data = new byte[length]; 
        is.read(data); 
        xmlString = new String(data); 
        } catch (IOException e1) { 
         e1.printStackTrace(); 
        } 
    
        return xmlString; 
    } 
    

的file.xml:

<Items> 
     <ItemData> 
      <ItemNumber>ABC</ItemNumber> 
      <Description>Desc1</Description>   
      <Price>9.95</Price>   
      <Weight>10.00</Weight>  
     </ItemData>  
     <ItemData>   
      <ItemNumber>XYZ</ItemNumber>   
      <Description>"Desc2"</Description>   
      <Price>19.95</Price> 
      <Weight>22.22</Weight> 
     </ItemData> 
    </Items> 

問題:

  • 我如何調用該函數getXML(String path)與作爲字符串參數的路徑,如果我的文件位於在\ assets \ xml \ file.xml下?

  • 最後,有沒有更好的方式來讀取XML文件作爲字符串?

謝謝!

+0

我試圖像'/資產串/ xml/file.xml'和許多類似的字符串,像這樣使用反斜槓和正斜槓。 – wafers

+0

看起來你需要弄清楚你的工作目錄是什麼以及你的文件的相對路徑是什麼。 –

+0

使用:file:///android_asset/xml/file.xml –

回答

1

路徑僅僅是使用正斜槓(/)

所以資產/ X/y.z作爲this.getAssets()引用的開放( 「X/y.z」)的資產目錄下的路徑。

這不是讀取數據的正確方法 - Inputstream.read不能保證讀取所有數據,它將返回讀取的字節數 - 可能這將適用於較小的文件,但可能會遇到較大的問題。

這是一般的代碼我讀閱讀的文本文件,而不是一個的FileReader使用的InputStreamReader

StringBuilder sw = new StringBuilder(); 
BufferedReader reader = new BufferedReader(new FileReader(file)); 
String readline = ""; 
while ((readline = reader.readLine()) != null) { 
    sw.append(readline); 
} 
String string = sw.toString(); 
+0

謝謝你,我現在試試這個代碼。你想說「而不是InputStreamReader用戶Filereader?或最後一句讓我困惑。」 – wafers

+0

什麼是「文件」?在當前情況下,我如何初始化「文件」? – wafers

+0

新的BufferedReader(新的InputStreamReader(is)) ; – siliconeagle

2

以下將工作:

InputStream is = context.getAssets().open("xml/file.xml"); 
+0

錯誤的答案!正確的方法是'xml/file.xml'而不是'file.xml'根據問題,謝謝無論如何 – wafers

+0

謝謝saafh,希望你能得到解決方案.. :) – Anu

相關問題