2014-11-24 4 views
0

이 코드는 XML 파일을 생성하고 외부 디렉토리에 저장합니다. XML 파일을 생성 한 후java.io.FileNotFoundException : open failed : 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()); 

,이 예외는이 문제를 해결하기 위해 어떤 방법

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

을 제기했다?

+2

파일 시스템의 읽기 전용 부분에 데이터를 쓰려고하지 않습니까? –

+0

매니페스트에서 사용 권한을 설정하여 – Opiatefuchs

답변

2

은 ... 외부 디렉토리

이 매우 옳지 않다에 저장합니다. 항상 읽기 전용 인 root 시스템 파티션에 저장하려고합니다. Environment.getRootDirectory()의 자바 독에서

: "시스템"의

돌아 루트 파티션 핵심 안드로이드 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에 자동 완성 처리해야합니다. 어쨌든, 답변 주셔서 감사합니다. 현재 작동 중입니다. 내가 얼마나 어리석은 지 잘못된 코드를 보지 못한다. –

+0

아 맞습니다. 두드러진. –

관련 문제