2011-09-12 2 views
0

xml 파일을 res/xml 폴더에서 장치 저장소로 복사하려고하는데 실제로이 작업을 수행하는 방법에 어려움을 겪고 있습니다.Res/Xml 폴더에서 장치 저장소로 Xml 파일 복사

나는 출발점이 xml 파일을 읽는 InputStream을 얻는다는 것을 알고있다.

file = new File("xmlfile.xml"); 
FileOutputStream fileOutputStream = new FileOutputStream(file); 

하지만 정말 읽고 초기 XML 파일에서 모든 정보를 정확히 복사하는 방법에 대한 사투를 벌인거야 :

InputStream is = getResources().openRawResource(R.xml.xmlfile); 

가 결국 출력 스트림이 될 것입니다 : 이것은이를 사용하여 달성 정확히.

는 지금까지, 나는 (DataInputStream, DataOutputStream, OutputStreamWriter 등) 읽고 쓸 수 InputStream 다양하고 OutputStream를 사용하여 시도했다 그러나 나는 아직도 제대로 얻는 것을 처리하지 않았다. 생성 된 XML 파일에는 알 수없는 문자 (인코딩 문제가 있습니까?)가 있습니다. 아무도 이것에 나를 도울 수 있습니까? 감사! res/xml에서

답변

0

당신은 내가 대신 원시 폴더를 사용한다고 생각 다음 코드

Resources r = getResources(); 
AssetManager assetManager = r.getAssets(); 

File f = new File(Environment.getExternalStorageDirectory(), "dummy.xml"); 
InputStream is = = assetManager.open("fileinAssestFolder.xml"); 
OutputStream os = new FileOutputStream(f, true); 

final int buffer_size = 1024 * 1024; 
try 
{ 
    byte[] bytes = new byte[buffer_size]; 
    for (;;) 
    { 
     int count = is.read(bytes, 0, buffer_size); 
     if (count == -1) 
      break; 
     os.write(bytes, 0, count); 
    } 
    is.close(); 
    os.close(); 
} 
catch (Exception ex) 
{ 
    ex.printStackTrace(); 
} 
+0

을 부분적으로 ... 당신은 왜 그런 BUFFER_SIZE 나에게 설명 할 수 있습니까? for 루프에 대해 자세히 설명 할 수 있습니다. 귀하의 방법과 몇 가지 다른 방법을 사용하여 시도했지만 새로 만든 된 XML 중 하나가 더 짧아, 또는 훨씬 더 많은 것 같아요. 메신저 여전히 원래 can not 이유는 정확한 xml 얻을. – ImpStudent

+0

해결! 덕분에 : D – ImpStudent

0

이하로 사용하여 assets 폴더의 모든 파일을 넣을 수 없습니다. http://developer.android.com/guide/topics/resources/providing-resources.html을 살펴보십시오.

+0

네, 원시 및 자산 폴더 (ingsaurabh에 의해 이전에 제안 된) 모두 잘 작동합니다. 하지만 나는 여전히 당신이 도울 수있는 또 다른 문제 (나는 ingsaurabh의 게시물에 댓글을 달았습니다)가 있습니까? – ImpStudent

0

또한이 코드를 사용할 수 있습니다

try { 
     InputStream input = getResources().openRawResource(R.raw.XZY); 
     OutputStream output = getApplicationContext().openFileOutput("xyz.mp3", Context.MODE_PRIVATE); 
     byte data[] = new byte[1024]; 
     long total = 0; 
     int count; 
     while ((count = input.read(data)) != -1) { 
      total += count; 
      output.write(data, 0, count); 
     } 
     output.flush(); 
     output.close(); 
     input.close(); 
    } catch (Exception e) { 
    } 

을 그리고 당신은 파일 사용이 코드를 필요로 할 때 : 작동

File k =getApplicationContext().getFileStreamPath("xyz.mp3");