createNewFile()抛出错误

时间:2011-08-23 08:22:41

标签: android file try-catch createfile

在我的Android应用程序中,我尝试在sdcard上创建一个xml文件。我试过这个:

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

但在LogCat中我得到了这个:

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

问题出在哪里?为什么createNewFile()会抛出IOException?需要一些帮助,请...

2 个答案:

答案 0 :(得分:5)

File newxmlfile = new File( Environment.getExternalStorageDirectory()+"/new.xml");

清单许可

< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

答案 1 :(得分:2)

检查您提到的在外部存储中写入的权限的清单文件