【问题标题】:Save file in Android with spaces in file name在Android中保存文件,文件名中有空格
【发布时间】:2012-04-24 16:04:13
【问题描述】:

我需要我的 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”。

有解决这个问题的想法吗? 赛博

【问题讨论】:

  • 你不应该自己建立文件名,使用new File(activity.getExternalCacheDir(), "Local storage.xml") - 它会为你做到这一点。不知道是什么导致了你的问题
  • 感谢您的回答,但这并不能解决我的问题。

标签: java android filenotfoundexception


【解决方案1】:

很难确定这个问题的根源,但它来自 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();
    }
}

再次感谢你们两位尝试解决我的问题。

【讨论】:

  • 感谢您的回答。你在那里拯救了我的一天。我用和你一样的方法解决了这个问题。
【解决方案2】:

这对我有用,只是多行代码

String fileName = "name with spaces" + ".xml";                  
fileName.replace(" ", "\\ ");

【讨论】:

  • 正斜杠还是反斜杠?
  • 对不起,反斜杠我会纠正它。希望它对你有用。
【解决方案3】:

尝试使用基本的 URL 编码:

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

最后的选择是尝试腾出空间。尝试将“”替换为“\”。

【讨论】:

  • 我在发布这个问题之前尝试了你的解决方案 Erwald,我没有例外,但它没有达到我的预期。实际上,它会创建一个名为“Local%20storage.xml”而不是“Local storage.xml”的 xml 文件。
  • 你的第二个答案也不起作用,你不能在java中转义像“\”这样的空格。
猜你喜欢
  • 2018-05-30
  • 2020-04-08
  • 1970-01-01
  • 2015-12-17
  • 2014-02-13
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多