2012-01-30 108 views
1

我有包含&包含明确facility.I保存backupdatabse这样Android的外部存储目录删除

DBBackup -- dir 
    2012-01-25 -dir 
     userventura.db -file 
    2012-01-25 -dir 
     userventura.db -file 

像明智我救日常数据库备份设施android应用。

问题是删除目录。例如,如果用户选择日期2012-01-28这个,那么它需要删除以前的目录。换句话说,与用户选择日期&的目录日期相比,它会删除这些文件。

我的问题是我无法删除Directory.It删除文件userventura.db

private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> { 
     private final ProgressDialog dialog = new ProgressDialog(getDialogContext()); 
     String strDate = disdbClrDate.getText().toString(); 

     protected void onPreExecute() { 
     this.dialog.setMessage("MicroSD card Clear.."); 
     this.dialog.show(); 
     } 

     protected Boolean doInBackground(final String... args) { 
     File exportDir = new File(Environment.getExternalStorageDirectory(), "databaseBaup/"); 

     if (!exportDir.exists()) { 
      exportDir.mkdirs(); 
     } 

     try { 
      String[] sample = exportDir.list(); 
      for(int i =0;i < sample.length;i++){ 
       File dirc = new File(exportDir, sample[i]); 
       File file = new File(exportDir, sample[i]+"/userventura.jpeg"); 

       if(dirc.getName().compareTo(strDate)<=0){ 
        try { 
         boolean st = file.delete(); 

         boolean dirStatus = dirc.delete(); 
         System.out.println("===st=="+st); 
         System.out.println("===dirStatus=="+dirStatus); 

         if(dirc.isDirectory()){ 

          boolean bs = file.delete(); 
          System.out.println("==bs=="+bs); 

          boolean dircStatus = dirc.delete(); 
          System.out.println("===dircStatus=="+dircStatus); 
         } 
        }catch (SecurityException se) { 
         se.printStackTrace(); 
        }catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 


      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
     } 

     protected void onPostExecute(final Boolean success) { 
     if (this.dialog.isShowing()) { 
      this.dialog.dismiss(); 
     } 
     if (success) { 
      Toast.makeText(DBClearActivity.this, "Micro SD card has been clear data successful!", Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(DBClearActivity.this, "Clear data failed", Toast.LENGTH_SHORT).show(); 
     } 

     Intent i = new Intent(getBaseContext(), DbBackupMainActivity.class); 
     View vi = SettingActivityGroup.group.getLocalActivityManager().startActivity("SettingScreenActivity", i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
     SettingActivityGroup.group.replaceView(vi); 
     } 



    } 

dirStatus总是返回false,但此行返回true boolean st = file.delete();

请帮我...

回答

3

好,使用此代码以删除目录,让我知道发生什么事,

这里的路径是你想要删除的directory file

static public boolean deleteDirectory(File path) { 
     if(path.exists()) { 
      File[] files = path.listFiles(); 
      if (files == null) { 
       return true; 
      } 
      for(int i=0; i<files.length; i++) { 
      if(files[i].isDirectory()) { 
       deleteDirectory(files[i]); 
      } 
      else { 
       files[i].delete(); 
      } 
      } 
     } 
     return(path.delete()); 
     } 
+0

Just this [link](http://stackoverflow.com/questions/5701586/delete-a-folder-on - SD卡),只有链接会做。 – 2012-01-30 07:42:23

1

如果你想删除目录,只需确保你的Directory is Empty。因此,首先删除您的文件,然后尝试删除目录。在你的代码中,你试图删除目录两次。因此,只有这应该在你的情况做,

if(dirc.getName().compareTo(strDate)<=0){ 
        try { 
          if(dirc.isDirectory()){ 

          boolean bs = file.delete(); 
          System.out.println("==bs=="+bs); 

          boolean dircStatus = dirc.delete(); 
          System.out.println("===dircStatus=="+dircStatus); 
         } 
        }catch (SecurityException se) { 
         se.printStackTrace(); 
        }catch (Exception e) { 
         e.printStackTrace(); 
        } 
0

考虑使用Android的DevicePolicyManager

只需要在你的一行代码如下所示:

devicePolicyManager.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE); 

不要忘了将它添加到您的清单:

<receiver 
     android:name=".WipeDevice" 
     android:description="@string/device_admin_enabled" 
     android:permission="android.permission.BIND_DEVICE_ADMIN" > 
     <intent-filter> 
      <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.device_admin" 
      android:resource="@xml/device_admin"/> 
    </receiver>