Этот код создает файл, но он всегда пуст.
Я видел несколько примеров использования 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);
... но пользователь может изменить место сохранения файла.
setFeature должен вызываться первым или нет, createNewFile не нужен. закрыть уже делает флеш.
setFeature
выглядит неправильно: говорит использовать синтаксический анализ / генерацию XML pull после запуска startDocument. Я ожидал бы IllegalStateException как бы то ни было. Поскольку createFile уже создал пустой файл, это объясняет возникающую ситуацию.