Почему этот FileOutputStream создает пустой файл? - PullRequest
0 голосов
/ 02 января 2019

Этот код создает файл, но он всегда пуст.

Я видел несколько примеров использования StringWriter, но мои XML-файлы могут стать такими большими, что не представляется практичным сохранять их в записывающем устройстве, преобразовывать их в строку и затем записывать в файл. Это должен быть поток.

Или, может быть, я не знаю, о чем говорю, и полностью запутался.

private void createXMLfile(File file, long folderRoot) throws IllegalArgumentException, IllegalStateException, IOException {
    // https://developer.android.com/reference/org/xmlpull/v1/XmlSerializer
    // /7619893/kak-sozdat-xml-fail-v-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 голосов
/ 03 января 2019

setFeature следует вызывать в первую очередь или нет, createNewFile не требуется. закрыть уже делает флеш.

...