为什么此FileOutputStream创建一个空文件?

时间:2019-01-02 04:30:01

标签: java android xmlserializer fileoutputstream xmlpullparser

此代码创建文件,但始终为空。

我已经看到一些使用StringWriter的示例,但是我的XML文件可能会变得如此之大,将其保存到编写器,将其转换为字符串然后再将其写入文件似乎并不实际。应该是流。

或者也许我不知道我在说什么,完全迷惑了自己。

private void createXMLfile(File file, long folderRoot) throws IllegalArgumentException, IllegalStateException, IOException {
    // https://developer.android.com/reference/org/xmlpull/v1/XmlSerializer
    // https://stackoverflow.com/questions/5181294/how-to-create-xml-file-in-android
    file.createNewFile();
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    XmlSerializer serializer = Xml.newSerializer();
    serializer.setOutput(fileOutputStream, G.KML.XML_ENCODING); // XML_ENCODING = "UTF-8"
    serializer.startDocument(G.KML.XML_ENCODING, Boolean.valueOf(true));
    serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
    serializer.startTag(null, G.KML.KML); // KML = "kml"
    serializer.endTag(null, G.KML.KML);
    serializer.endDocument();
    serializer.flush();
    fileOutputStream.flush();
    fileOutputStream.close();
}

我的清单权限:

<!-- Following two permissions are for import/export functionality -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

此文件正在写入:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

...但是用户可以更改文件的保存位置。

1 个答案:

答案 0 :(得分:0)

setFeature应该先调用还是不调用,不需要createNewFile。关闭已经进行了刷新。