I need for my android application to save an xml file into the external cache with a file name which contains space.
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(activity
.getExternalCacheDir().getAbsolutePath()
+ "/Local storage.xml"));
transformer.transform(source, result);
When I browse manually into my file directory I find this file : "Local%20storage.xml".
So after when I try to read it with
File localStorageXmlFile = new File(activity.getExternalCacheDir()
.getAbsolutePath()
+ "/Local storage.xml");
But I have a FileNotFoundException because the file "Local storage.xml" can't be found on my device.
Any ideas to solve this? Seb
It was hard to identify the source of this problem but it comes from StreamResult which replaces spaces in file name by %20. There is a bug report for this issue here.
And here is the solution :
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(activity
.getExternalCacheDir().getAbsolutePath()
+ "/" + "Local storage" + ".xml"));
Result fileResult = new StreamResult(fos);
transformer.transform(source, fileResult);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fos != null) {
fos.close();
}
}
Thanks again to both of you for trying to solve my issue.
This works for me and is just one extra line of code
String fileName = "name with spaces" + ".xml";
fileName.replace(" ", "\\ ");
Try using basic URL encoding :
File localStorageXmlFile = new File(activity.getExternalCacheDir()
.getAbsolutePath()
+ "/Local%20storage.xml");
This mgiht help you : URL encoding table
Also, when working with file, make sure you're using the right file separator for the OS (in your case the hard coded / should work since Android is linux based but just to make sure. This could be an other option :
File localStorageXmlFile = new File(activity.getExternalCacheDir()
.getAbsolutePath() + File.separator
+ "Local storage.xml");
Last resort optin would be to try to espace the space. Try replacing " " with "\ ".
来源:https://stackoverflow.com/questions/10301674/save-file-in-android-with-spaces-in-file-name