Why is this FileOutputStream creating an empty file?












1















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.










share|improve this question




















  • 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















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.










share|improve this question




















  • 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








1








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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














  • 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












1 Answer
1






active

oldest

votes


















0














setFeature should be called first or not, createNewFile is not needed. close already does a flush.






share|improve this answer
























  • "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











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


}
});














draft saved

draft discarded


















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









0














setFeature should be called first or not, createNewFile is not needed. close already does a flush.






share|improve this answer
























  • "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
















0














setFeature should be called first or not, createNewFile is not needed. close already does a flush.






share|improve this answer
























  • "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














0












0








0







setFeature should be called first or not, createNewFile is not needed. close already does a flush.






share|improve this answer













setFeature should be called first or not, createNewFile is not needed. close already does a flush.







share|improve this answer












share|improve this answer



share|improve this answer










answered Jan 2 at 21:52









Joop EggenJoop Eggen

78.2k755105




78.2k755105













  • "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













  • 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




















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

A Topological Invariant for $pi_3(U(n))$