androidfiletry-catchcreatefile

createNewFile() throws an error


In my android app I try to create a xml file on sdcard. I tried this :

public class XmlFileCreator extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        System.out.println(Environment.getExternalStorageDirectory());
        // create a new file called "new.xml" in the SD card
        File newxmlfile = new File( Environment.getExternalStorageDirectory(),"new.xml");
        try {
            newxmlfile.createNewFile();
        } catch (IOException e) {
            Log.e("IOException", "exception in createNewFile() method");
        }

        FileOutputStream fileos = null;
        try {
            fileos = new FileOutputStream(newxmlfile);
        } catch (FileNotFoundException e) {
            Log.e("FileNotFoundException", "can't create FileOutputStream");
        }
        // we create a XmlSerializer in order to write xml data
        XmlSerializer serializer = Xml.newSerializer();

        try {
            // we set the FileOutputStream as output for the serializer, using
            // UTF-8 encoding
            serializer.setOutput(fileos, "UTF-8");
            // Write <?xml declaration with encoding (if encoding not null) and
            // standalone flag (if standalone not null)
            serializer.startDocument(null, Boolean.valueOf(true));
            // set indentation option
            serializer.setFeature(
                    "http://xmlpull.org/v1/doc/features.html#indent-output",
                    true);
            // start a tag called "root"
            serializer.startTag(null, "root");
            // i indent code just to have a view similar to xml-tree
            serializer.startTag(null, "child1");
            serializer.endTag(null, "child1");
            serializer.startTag(null, "child2");
            // set an attribute called "attribute" with a "value" for <child2>
            serializer.attribute(null, "attribute", "value");
            serializer.endTag(null, "child2");

            serializer.startTag(null, "child3");
            // write some text inside <child3>
            serializer.text("some text inside child3");
            serializer.endTag(null, "child3");

            serializer.endTag(null, "root");
            serializer.endDocument();
            // write xml data into the FileOutputStream
            serializer.flush();
            // finally we close the file stream
            fileos.close();

            System.out.println("file has been created on SD card");         
        }
        catch(Exception e){
            Log.e("Exception","error occurred while creating xml file");
        }
    }
}

but in LogCat I get this :

08-23 11:19:56.776: ERROR/IOException(6333): exception in createNewFile() method
08-23 11:19:56.776: ERROR/FileNotFoundException(6333): can't create FileOutputStream
08-23 11:19:56.776: ERROR/Exception(6333): error occurred while creating xml file

Where is the problem? Why createNewFile() throws an IOException? Need some help, please...


Solution

  • Once check the manifast file that you mentioned the permission to write in external storage or not