【问题标题】:Writing to file using getFilesDir() giving 'Read-only file system' error (Android)使用 getFilesDir() 写入文件给出“只读文件系统”错误(Android)
【发布时间】:2017-10-18 02:31:07
【问题描述】:

我想写入应用程序的内部文件目录,但出现以下错误:

java.io.FileNotFoundException: com.android.internal.os.AndroidPrintStream@47a0990 (Read-only file system)

所以它说它是“只读”存储。我正在使用getFilesDir() 来检索路径,并且我在网上看到了很多人们使用它来写入内部存储的示例。为什么我会看到此错误?

我的代码如下:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.newDocument();

// Root element
Element rootElement = doc.createElement("license");
doc.appendChild(rootElement);

// Write content to XML file.
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(context.getFilesDir().getPath() + "/license.xml"));
System.out.println("Saving to: " + context.getFilesDir().getPath());
transformer.transform(source, result);

在我的代码的最后一行抛出异常。

我的清单中有以下权限:

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

注意,我不想写入外部存储,因为该文件不应该对用户可见。

我可以使用FileOutputStream 写入同一目录而不会引发任何异常...那么为什么Transformer 会遇到这个只读问题?

【问题讨论】:

  • 您的文件在设备内存或 SD 卡中?
  • 它应该在设备内存中,在 /data/user/0/[my app]/files
  • @petehallw 你用的是什么设备?
  • @Vyacheslav 我正在使用装有 Android 7.0 的 Moto G4 手机。
  • @petehallw:您尝试过共享首选项选项

标签: java android xml internal-storage transformer


【解决方案1】:

getFilesDir()/data/data/com.example.apk/files

您无需使用这些权限。

上面写着filenotfound。尝试先创建它。

不过,这很奇怪

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多