【问题标题】:java.io.FileNotFoundException: open failed: EROFS (Read-only file system)java.io.FileNotFoundException:打开失败:EROFS(只读文件系统)
【发布时间】:2015-01-22 02:36:21
【问题描述】:

我有这段代码可以生成 XML 文件并保存到外部目录。

    try //database structure
    {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        //test report elements, does not reflect the real database in the future
        //mandatory/ username, location, caption, media, time(Actually, it's best if the server determines recieve time)
        //optional/
        //reportdata elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("reportdata");
        doc.appendChild(rootElement);

        //username elements
        Element username = doc.createElement("username");
        username.appendChild(doc.createTextNode("testusername"));
        rootElement.appendChild(username);

        //Location ELEMENTS
        //latitude elements
        Element lat = doc.createElement("latitude");
        lat.appendChild(doc.createTextNode(String.valueOf(latitude)));
        rootElement.appendChild(lat);
        //longitude
        Element longi = doc.createElement("longitude");
        longi.appendChild(doc.createTextNode(String.valueOf(longitude)));
        rootElement.appendChild(longi);

        //caption text elements

        Element capt = doc.createElement("caption");
        capt.appendChild(doc.createTextNode(captionText.getText().toString()));
        rootElement.appendChild(capt);

        //tag elements
        String[] tagArr = new String[selectItems.size()];
        tagArr = selectItems.toArray(tagArr);
        Element tags = doc.createElement("tags");
        rootElement.appendChild(tags);
        int o = selectItems.size();
        for(String s: tagArr) {
            Element tagname = doc.createElement("tagname");
            tagname.appendChild(doc.createTextNode(s));
            tags.appendChild(tagname);
        }

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        //StreamResult result = new StreamResult(System.out);
        StreamResult result = new StreamResult(new File(android.os.Environment.getRootDirectory(), "upload_data.xml"));
        transformer.transform(source, result);
        Log.d("MESSAGE", result.toString());

创建 XML 文件后,引发此异常

D/XML TransformerException﹕ java.io.FileNotFoundException: /system/upload_data.xml: open failed: EROFS (Read-only file system)

有什么办法解决这个问题?

【问题讨论】:

  • 不要尝试将数据写入文件系统的只读部分?
  • 在manifest中设置权限以获得写入权限

标签: java android xml android-studio


【解决方案1】:

...保存到外部目录

这不太对。您正在尝试将其保存在始终只读的root 系统分区中。

来自Environment.getRootDirectory()的javadoc:

返回包含核心 Android 操作系统的“系统”分区的根目录。始终存在并以只读方式安装。

解决方案:只需将文件保存在其他地方即可:

StreamResult result = new StreamResult(new File(android.os.Environment.getExternalStorageDirectory(), "upload_data.xml"));

请注意:

  • 您必须请求写入外部存储的权限:

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

  • 外部存储并不总是可用的。当您尝试在其上写入时,该分区可能尚未安装。 (小心点)

【讨论】:

  • 哎呀,智能感知必须自动完成它到 getRootDirectory。无论如何,感谢您的回答,它现在正在工作。没看到那个错误的代码真是太愚蠢了。
猜你喜欢
  • 2014-04-19
  • 2019-09-30
  • 2012-12-08
  • 2015-01-02
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2015-06-08
相关资源
最近更新 更多