2010-01-12 80 views
2

这可能是一个非常愚蠢的/ noob类似的问题,但什么是最好的方法有一个.apk文件,当安装时将一个zip文件放到SD卡上,在特定的目录中,从资产或原始文件夹?从.APK文件到SD卡的压缩

回答

2

我有一个应用程序需要做到这一点,我所做的是检查我是否需要在SDCard上运行时,如果用户删除它,我可以将其替换。这里是我的代码:

void copyAssets() 
{ 
    String[] files; 
    try 
    { 
     files = this.getResources().getAssets().list(""); 
    } 
    catch (IOException e1) 
    { 
     return; 
    } 

    if(!mWorkingPath.exists()) 
    { 
     if(!mWorkingPath.mkdirs()) 
     { 
      new AlertDialog.Builder(this) 
       .setTitle(R.string.ERROR) 
       .setMessage(R.string.FAILED_DIR_CREATE) 
       .setPositiveButton(android.R.string.ok, new OnClickListener(){ 
        @Override 
        public void onClick(DialogInterface dialog, int which) 
        { 
         dialog.dismiss(); 
        } 
       }) 
       .create() 
       .show(); 
     } 
    } 

    for(int i = 0; i < files.length; i++) 
    { 
     try 
     { 
      String fileName = files[i]; 

      if(fileName.compareTo("images") == 0 || 
       fileName.compareTo("sounds") == 0 || 
       fileName.compareTo("webkit") == 0) 
      { 
       continue; 
      } 

      File outFile = new File(mWorkingPath, fileName); 
      if(outFile.exists()) continue; 

      InputStream in = getAssets().open(fileName); 
      OutputStream out = new FileOutputStream(outFile); 

      // Transfer bytes from in to out 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) 
      { 
       out.write(buf, 0, len); 
      } 

      in.close(); 
      out.close(); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}