8

I'm trying to read the same file "xmlfile.xml" from the assets folder and also another copy from the SD card sdcard/download/.

I can Read from SD Card:

  • unfile Return True
  • Esite Return True

I can't not Read from Assets folder:

  • unfile Return False
  • Esite Return False

This code il NOT Working

        File source = new File("file:///android_asset/xmlfile.xml");
        boolean unfile = source.isFile();
        boolean Esiste = source.exists();

        try
        {
          // todo
        } catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

This code il Working

        File source = new File("/sdcard/" + "download" + "/" + "xmlfile.xml");
        boolean unfile = source.isFile();
        boolean Esiste = source.exists();

        try
        {
          // todo
        } catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

someone can explain me how can I read the file from the Assets folder.

thanks marco

1

6 Answers 6

12

To open an asset you'd need the following piece of code:

InputStream is = getAssets().open("xmlfile.xml")
Sign up to request clarification or add additional context in comments.

Comments

7

Use this function

// Converting given XML file name to String form
String mOutputText = getxml("yourxml.xml");

/**
 * Function used to fetch an XML file from assets folder
 * @param fileName - XML file name to convert it to String
 * @return - return XML in String form
 */
private String getXml(String fileName) {
    String xmlString = null;
    AssetManager am = context.getAssets();
    try {
        InputStream is = am.open(fileName);
        int length = is.available();
        byte[] data = new byte[length];
        is.read(data);
        xmlString = new String(data);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    return xmlString;
}

2 Comments

For File I meant the Class link
replace InputStream is = am.open(path); with InputStream is = new FileInputStream(File) i think it may help
1

I found it easier to do the following:

val xmlStream = context.resources.getXml(R.xml.example)

I believe this is a subset of XmlPullParser, but it has worked well enough.

Comments

0

This will surely help you. For reading a file form assets folder you need a InputStream Object.

Syntax:

InputStream yourobj=getApplicationContext().getAssets().open("Path to xml file");

So the live code can be:

InputStream in_s = getApplicationContext().getAssets().open("www/application/app/client/controllers/data1.xml");

Here data1.xml is the file inside the path.

Comments

0
    try 
    {
        AssetManager aManager = Class.getAssets();
        InputStream iStream = aManager.open("file.xml");
        int length = iStream.available();
        byte[] data = new byte[length];
        iStream.read(data);
        assetString = new String(data).toString();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

Comments

0

If you only want to get the value of a specific item inside the .xml you could use this:

object AssetUtils {

    fun readXmlItemByName(
        context: Context,
        assetFileName: String,
        itemName: String
    ): String? {
        try {
            // Open file stream from project asset folder
            val fileInputStream = context.assets.open(assetFileName)

            // Create buffer to stream file into
            val size = fileInputStream.available()
            val buffer = ByteArray(size)

            // Read stream into buffer
            fileInputStream.read(buffer)
            fileInputStream.close()

            // Write buffer to string
            val utf8: Charset = Charset.forName("UTF-8")
            val string = String(buffer, utf8)

            // Check lines for xml item name
            val xmlItemName = "\"" + itemName + "\""
            val lines = string.lines()
            lines.forEach {
                // Found parameterName in line
                if (it.contains(xmlItemName)) {
                    // Extract value
                    val value = it.substringAfter(">").substringBefore("</")

                    // Return value
                    if (value.isNotBlank()) {
                        return value
                    }
                }
            }

            return null
        } catch (e: Exception) {
            Log.e("AssetsUtils", "readXmlParameter(): ${e.message}")
            return null
        }
    }

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.