2014-01-11 4 views
1

안드로이드 자산에서 sdcard로 .tar 파일을 복사하려고하는데 파일을 복사하는 동안 IOException이 발생합니다. 이전 코드에서이 코드를 사용하고 있습니다. How to copy files from 'assets' folder to sdcard?안드로이드 : 자산에서 sdcard로 tar 파일 복사 - IOException

다음은 LogCat 파일입니다. 나는이 모든 ASyncTask에서 일을하고 있지만 또한 주요 UI 스레드에서 시도하고 여전히이 예외가 발생했습니다.

01-11 06:51:49.925: E/tag(3881): Failed to copy asset file: temp.tar 
01-11 06:51:49.925: E/tag(3881): java.io.IOException 
01-11 06:51:49.925: E/tag(3881): at android.content.res.AssetManager.readAsset(Native Method) 
01-11 06:51:49.925: E/tag(3881): at android.content.res.AssetManager.access$700(AssetManager.java:36) 
01-11 06:51:49.925: E/tag(3881): at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:571) 
01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity.copyFile(MainActivity.java:130) 
01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity.copyAssets(MainActivity.java:116) 
01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity.access$0(MainActivity.java:97) 
01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MainActivity$1.doInBackground(MainActivity.java:32) 
01-11 06:51:49.925: E/tag(3881): at com.example.apptest.MyASyncTask.doInBackground(MyASyncTask.java:1) 
01-11 06:51:49.925: E/tag(3881): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
01-11 06:51:49.925: E/tag(3881): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
01-11 06:51:49.925: E/tag(3881): at java.lang.Thread.run(Thread.java:1096) 
+0

이것은 이상합니다. 나는 또한이 예외를 받고 있지만 내 파일을 올바르게 sdcard로 복사되고 그래서 난 그냥 예외를 무시했습니다 : –

+0

BTW 당신은 ​​외부 저장소를 확인 했습니까? 파일이 존재하거나 존재하지 않습니까? –

+0

나는 해결책을 얻었다. 나는 이미 그것을 게시했다. – Master

답변

0

, 내가 큰 문제가 zip 또는 tar으로 생각 : 당신

여기
2

귀하가 매니페스트에서 허가를 받았습니까?

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

SD에 뭔가를 쓰기 권한

+1

이것이 제가 한 첫 번째 것입니다. 나는 이것 때문에 예외를 얻지 않을 것이다. 다른 이유가 있습니다. – Master

+0

@ error.exe 여기서 예외 추적을 붙여 넣을 수 있습니다 –

+0

원래 질문에 로그 추적을 추가했습니다. – Master

0

나는 문제가 쓰기 권한으로 생각하지 않는다 필요하기 때문이다. 자산 폴더에서 파일을 읽으려고 할 때입니다. 프로젝트를 정리하고 다시 빌드하십시오. 자산 파일을 열려면 MainActivitygetAssets()을 사용해야합니다. Try/Catch 블록을 사용하여 IOException을 잡아 근본 원인을 찾습니다. 사실

File toPath = Environment.getExternalStoragePublicDirectory(mAppDirectory); 
    if (!toPath.exists()) { 
     toPath.mkdir(); 
    } 

    try { 
     InputStream inStream = getAssets().open("file.xml"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(inStream)); 
     File toFile = new File(toPath, "file.xml"); 
     copyAssetFile(br, toFile); 
    } catch (IOException e) { 
    } 

private void copyAssetFile(BufferedReader br, File toFile) throws IOException { 
    BufferedWriter bw = null; 
    try { 
     bw = new BufferedWriter(new FileWriter(toFile)); 

     int in; 
     while ((in = br.read()) != -1) { 
      bw.write(in); 
     } 
    } finally { 
     if (bw != null) { 
      bw.close(); 
     } 
     br.close(); 
    } 
} 
+0

코드를 사용하고있는 링크를 게시했습니다. 이 링크에서 허용되는 대답은 자산에서 파일을 복사하는 코드로 사용하고있는 것입니다. – Master

+0

게시 한 링크와 동일한 코드를 사용 했습니까? – Piyush

0

을 도울 수있는 적절한 코드를 나는 SD 카드에 내 자산 폴더에서 XML 파일을 복사하는 일을한다 게시하시기 바랍니다 체재. 이 특정 파일 형식을 assets에서 sdcard으로 복사 할 때 복사 할 수 없습니다. 그 이유는 zip 그 자체가 문제를 만드는 파일의 모음이라는 것입니다.

파일 확장자를 변경하면 해당 .tar 파일을 sdcardassets에서 복사 할 수 있습니다.

파일을 확장하지 않고 파일 이름을 앞에 붙여서 출력 스트림 추가 확장 프로그램에 쓰는 것이 가장 좋습니다. 그런 다음이 파일을 복사하면 더 이상 방해가되지 않습니다.

+0

답변 해 주셔서 감사합니다. 나는 문제가 있었던 곳에서 그것을 얻었다. 문제의 출처는 파일 확장자입니다. – Master

관련 문제