2014-11-24 106 views
0

我有這段代碼生成一個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) 

任何方式解決這一問題?

+2

不要試圖將數據寫入文件系統的只讀部分? – 2014-11-24 11:36:57

+0

在清單中設置權限以獲得寫權限 – Opiatefuchs 2014-11-24 11:37:32

回答

2

...保存到外部目錄

這是不完全正確。您正嘗試將其保存在始終爲只讀的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" />

  • 外部存儲並不總是可用的。當你嘗試寫入分區時,分區可能不會被安裝。 (只是要小心)
+0

呵呵,intellisense必須自動完成它到getRootDirectory。無論如何,謝謝你回答,它現在正在工作。我多麼愚蠢,沒有看到錯誤的代碼。 – 2014-11-24 11:49:50

+0

啊是的。標記。 – 2014-11-24 12:54:55

相關問題