2013-02-24 56 views
1

在我的資產文件夾中,我有一個名爲lecture.pdf的pdf文件。我試圖將這個文件從資產複製到SD卡,以便從我的應用程序中讀取PDF,但文件無法在SD卡上寫入。有人能告訴我我做錯了什麼。下面是編寫到SD卡目錄代碼將pdf文件從資產複製到SD卡

公共類XAclass延伸活動{

WebView web; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.large); 

    new Asyntasking(); 

    Intent intent = new Intent(getParent(), MyPdfViewerActivity.class); 
    intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, 
      "mnt/sdcard/mylecture/lecture.pdf"); 

    startActivity(intent); 


} 



private class Asyntasking extends AsyncTask<Void,Void,Void> 
{ 
private void CopyAssets() { 
     AssetManager assetManager = getAssets(); 
     String[] files = {}; 
     try { 
      files = assetManager.list("lecture.pdf"); 
     } catch (IOException e) { 
      Log.e("tag", e.getMessage()); 
     } 

     for(String filename : files) { 
      System.out.println("File name => "+filename); 
      InputStream in= null; 

      OutputStream out = null; 
      try { 
       in = assetManager.open("/mnt/sdcard/mylecture/"+filename); // if files resides inside the "Files" directory itself 
       out = new FileOutputStream("/mnt/sdcard/mylecture/"+filename); 
       copyFile(in, out); 
       in.close(); 
       in = null; 
       out.flush(); 
       out.close(); 
       out = null; 
      } catch(Exception e) { 
       Log.e("tag", e.getMessage()); 
      } 
     } 
    } 
    private void copyFile(InputStream in, OutputStream out) throws IOException { 
     byte[] buffer = new byte[1024]; 
     int read; 
     while((read = in.read(buffer)) != -1){ 
      out.write(buffer, 0, read); 
     } 
    } 

@覆蓋 保護無效doInBackground(虛空...... PARAMS){// TODO自動生成方法存根 CopyAssets(); 返回null; }

} 

}

+0

你在manifest文件 添加權限'<使用許可權的android:NAME = 「android.permission.WRITE_EXTERNAL_STORAGE」/>' – Naveen 2013-02-24 07:48:42

+0

同樣的問題我..如果我不使用異步任務比它工作得很好。 – 2013-02-26 14:19:29

回答

2

試試這個代碼

private class Asyntasking extends AsyncTask<Void,Void,Void> 
    { 
    private void CopyAssets() { 
      AssetManager assetManager = getAssets(); 
      String[] files = {}; 
      try { 
       files = assetManager.list("Files"); 
      } catch (IOException e) { 
       Log.e("tag", e.getMessage()); 
      } 

      for(String filename : files) { 
       System.out.println("File name => "+filename); 
       InputStream in= null; 

       OutputStream out = null; 
       try { 
        in = assetManager.open("Files/"+filename); // if files resides inside the "Files" directory itself 
        out = new FileOutputStream(exportDirectory+filename); 
        copyFile(in, out); 
        in.close(); 
        in = null; 
        out.flush(); 
        out.close(); 
        out = null; 
       } catch(Exception e) { 
        Log.e("tag", e.getMessage()); 
       } 
      } 
     } 
     private void copyFile(InputStream in, OutputStream out) throws IOException { 
      byte[] buffer = new byte[1024]; 
      int read; 
      while((read = in.read(buffer)) != -1){ 
       out.write(buffer, 0, read); 
      } 
     } 





@Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     CopyAssets(); 
       return null; 
    } 
+0

請問什麼是files = assetManager.list(「Files」)中的「files」?和in = assetManager.open(「Files /」+ filename); out = new FileOutputStream(exportDirectory + filename); – Dimitri 2013-02-24 08:01:58

+0

它是資產folder.like文件中的文件名 - >文件 – 2013-02-24 08:04:40

+0

我已更新我的問題與您的解決方案..你可以請糾正我,如果我錯了 – Dimitri 2013-02-24 08:51:54

0

要寫入外部存儲中的數據,我們將不得不放棄在AndroidManifest.xml的權限。

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

就像現在你更新了logcat的你能解決使用的AsyncTask或處理程序此錯誤。

+0

是的,它有權限 – Dimitri 2013-02-24 07:50:33

+0

也在這裏發佈logcat。 – 2013-02-24 07:50:54

+0

logcat在我更新的問題 – Dimitri 2013-02-24 07:56:07

相關問題