我的android应用程序需要将xml文件保存到外部缓存中,文件名包含空格。
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(activity
.getExternalCacheDir().getAbsolutePath()
+ "/Local storage.xml"));
transformer.transform(source, result);
当我手动浏览到我的文件目录时,我找到了这个文件:" Local%20storage.xml"。
所以当我尝试用
阅读它之后File localStorageXmlFile = new File(activity.getExternalCacheDir()
.getAbsolutePath()
+ "/Local storage.xml");
但是我有一个FileNotFoundException,因为文件" Local storage.xml"无法在我的设备上找到。
有什么想法可以解决这个问题? SEB
答案 0 :(得分:6)
很难确定此问题的根源,但它来自StreamResult,它用%20替换文件名中的空格。有关此问题的错误报告here。
这是解决方案:
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();
}
}
再次感谢你们两位试图解决我的问题。
答案 1 :(得分:4)
这对我有用,只是一行额外代码
String fileName = "name with spaces" + ".xml";
fileName.replace(" ", "\\ ");
答案 2 :(得分:1)
尝试使用基本网址编码:
File localStorageXmlFile = new File(activity.getExternalCacheDir()
.getAbsolutePath()
+ "/Local%20storage.xml");
这可以帮助您:URL encoding table
此外,在使用文件时,请确保您使用的操作系统正确的文件分隔符(在您的情况下,硬编码/应该工作,因为Android是基于Linux的,但只是为了确保。 这可能是另一种选择:
File localStorageXmlFile = new File(activity.getExternalCacheDir()
.getAbsolutePath() + File.separator
+ "Local storage.xml");
最后的选择optin将尝试占据空间。尝试将“”替换为“\”。