3
  • I have xml file under ASSETS dir (com.android.project\assets\xml\file.xml).
  • I want to call a (following) function to read the xml file and return the contents as String.
  • The function requires the path of the file as string. I don't know how to give the path of the file as string.

    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;
    }
    

The 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>

QUESTIONS:

  • How can I call the function getXML(String path) with a path as string parameter, if my file is located under \assets\xml\file.xml ?

  • Finally, Is there any better way of reading XML file as a String?

Thank you!

4

2 に答える 2

2

次のように動作します。

InputStream is = context.getAssets().open("xml/file.xml");
于 2012-10-04T08:02:43.377 に答える
1

パスは、スラッシュ (/) を使用したアセット ディレクトリの下のパスです。

したがって、assets/x/yz は this.getAssets().open("x/yz"); として参照されます。

これはデータを読み取る正しい方法ではありません - 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();
于 2012-10-04T07:56:42.187 に答える