2012-01-30 144 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>