java.io.FileNotFoundException:打开失败:EROFS(只读文件系统)
我有这段代码生成一个XML文件并保存到外部目录。java.io.FileNotFoundException:打开失败:EROFS(只读文件系统)
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)
任何方式解决这一问题?
...保存到外部目录
这是不完全正确。您正尝试将其保存在始终为只读的root系统分区中。
从Environment.getRootDirectory()的Javadoc:
“系统” 的返回根分区保持Android核心OS。始终呈现并安装为只读。
解决方法:只需将文件保存在其他地方:
StreamResult result = new StreamResult(new File(android.os.Environment.getExternalStorageDirectory(), "upload_data.xml"));
需要注意的是:
- 你必须要求写权限的外部存储:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 外部存储并不总是可用的。当你尝试写入分区时,分区可能不会被安装。 (只是要小心)
呵呵,intellisense必须自动完成它到getRootDirectory。无论如何,谢谢你回答,它现在正在工作。我多么愚蠢,没有看到错误的代码。 – 2014-11-24 11:49:50
啊是的。标记。 – 2014-11-24 12:54:55
不要试图将数据写入文件系统的只读部分? – 2014-11-24 11:36:57
在清单中设置权限以获得写权限 – Opiatefuchs 2014-11-24 11:37:32