Почему этот FileOutputStream создает пустой файл?

1

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

Я видел несколько примеров использования 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();
}

Мой манифест permissions:

<!-- 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);

... но пользователь может изменить место сохранения файла.

Теги:
xmlserializer
fileoutputstream
xmlpullparser

1 ответ

0

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

  • 0
    "startDocument ... Этот метод может быть вызван только после setOutput." Я так понимаю, что значит прежде всего? per: developer.android.com/reference/org/xmlpull/v1/…
  • 0
    setFeature выглядит неправильно: говорит использовать синтаксический анализ / генерацию XML pull после запуска startDocument. Я ожидал бы IllegalStateException как бы то ни было. Поскольку createFile уже создал пустой файл, это объясняет возникающую ситуацию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню