问题
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
回答1:
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.
回答2:
This works for me and is just one extra line of code
String fileName = "name with spaces" + ".xml";
fileName.replace(" ", "\\ ");
回答3:
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