Why is this FileOutputStream creating an empty file?
This code creates the file, but it's always empty.
I have seen some examples using a StringWriter, but my XML files can become so large, it doesn't seem practical saving it to a writer, converting it to a string, and then writing it to a file. It should be a stream.
Or perhaps I don't know what I'm talking about and have totally confused myself.
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();
}
My Manifest 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" />
This file is being written to:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
...but the user can change where the file gets saved.
java android xmlserializer fileoutputstream xmlpullparser
add a comment |
This code creates the file, but it's always empty.
I have seen some examples using a StringWriter, but my XML files can become so large, it doesn't seem practical saving it to a writer, converting it to a string, and then writing it to a file. It should be a stream.
Or perhaps I don't know what I'm talking about and have totally confused myself.
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();
}
My Manifest 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" />
This file is being written to:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
...but the user can change where the file gets saved.
java android xmlserializer fileoutputstream xmlpullparser
1
@elyor Flushing is unnecessary, but won't cause a problem.createNewFile
will only create a new file if one doesn't already exist, and since we don't know the provenance of the passed-in file, also seems harmless.
– Dave Newton
Jan 2 at 21:17
add a comment |
This code creates the file, but it's always empty.
I have seen some examples using a StringWriter, but my XML files can become so large, it doesn't seem practical saving it to a writer, converting it to a string, and then writing it to a file. It should be a stream.
Or perhaps I don't know what I'm talking about and have totally confused myself.
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();
}
My Manifest 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" />
This file is being written to:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
...but the user can change where the file gets saved.
java android xmlserializer fileoutputstream xmlpullparser
This code creates the file, but it's always empty.
I have seen some examples using a StringWriter, but my XML files can become so large, it doesn't seem practical saving it to a writer, converting it to a string, and then writing it to a file. It should be a stream.
Or perhaps I don't know what I'm talking about and have totally confused myself.
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();
}
My Manifest 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" />
This file is being written to:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
...but the user can change where the file gets saved.
java android xmlserializer fileoutputstream xmlpullparser
java android xmlserializer fileoutputstream xmlpullparser
edited Jan 2 at 21:05
qkzoo1978
asked Jan 2 at 4:30
qkzoo1978qkzoo1978
135110
135110
1
@elyor Flushing is unnecessary, but won't cause a problem.createNewFile
will only create a new file if one doesn't already exist, and since we don't know the provenance of the passed-in file, also seems harmless.
– Dave Newton
Jan 2 at 21:17
add a comment |
1
@elyor Flushing is unnecessary, but won't cause a problem.createNewFile
will only create a new file if one doesn't already exist, and since we don't know the provenance of the passed-in file, also seems harmless.
– Dave Newton
Jan 2 at 21:17
1
1
@elyor Flushing is unnecessary, but won't cause a problem.
createNewFile
will only create a new file if one doesn't already exist, and since we don't know the provenance of the passed-in file, also seems harmless.– Dave Newton
Jan 2 at 21:17
@elyor Flushing is unnecessary, but won't cause a problem.
createNewFile
will only create a new file if one doesn't already exist, and since we don't know the provenance of the passed-in file, also seems harmless.– Dave Newton
Jan 2 at 21:17
add a comment |
1 Answer
1
active
oldest
votes
setFeature should be called first or not, createNewFile is not needed. close already does a flush.
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.
– Joop Eggen
Jan 3 at 10:20
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54001209%2fwhy-is-this-fileoutputstream-creating-an-empty-file%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
setFeature should be called first or not, createNewFile is not needed. close already does a flush.
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.
– Joop Eggen
Jan 3 at 10:20
add a comment |
setFeature should be called first or not, createNewFile is not needed. close already does a flush.
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.
– Joop Eggen
Jan 3 at 10:20
add a comment |
setFeature should be called first or not, createNewFile is not needed. close already does a flush.
setFeature should be called first or not, createNewFile is not needed. close already does a flush.
answered Jan 2 at 21:52
Joop EggenJoop Eggen
77.8k755103
77.8k755103
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.
– Joop Eggen
Jan 3 at 10:20
add a comment |
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.
– Joop Eggen
Jan 3 at 10:20
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
"startDocument... This method can only be called just after setOutput." I take that to mean before anything else? per: developer.android.com/reference/org/xmlpull/v1/…
– qkzoo1978
Jan 2 at 21:56
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.– Joop Eggen
Jan 3 at 10:20
setFeature
looks wrong: telling to use XML pull parsing/generation, after startDocument was issued. I would have expected an IllegalStateException however. As createFile already created an empty file, that would explain the resulting situation.– Joop Eggen
Jan 3 at 10:20
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54001209%2fwhy-is-this-fileoutputstream-creating-an-empty-file%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
@elyor Flushing is unnecessary, but won't cause a problem.
createNewFile
will only create a new file if one doesn't already exist, and since we don't know the provenance of the passed-in file, also seems harmless.– Dave Newton
Jan 2 at 21:17