2016-04-01 18 views
0

Kodum, "hss" dizesini içeren tüm dosyaları kendi adlarına silmek içindir. Bu, dahili bellekteki tüm dosyalar için iyi çalışır, ancak bir klasörde bulunan dosyaları silmez.Android dosyalarının düzgün şekilde silinmesi yolu

Nasıl çalışır? parantez içindeki

if (listFile[i].isDirectory()) { 

       } 

şey koyun ... sadece ayrı yöntemle deleteDirectory içine doInBackground yöntemin en planı ayrı ve yinelemeli bu çağırabilirsiniz:

public class RemoveApkTraces extends Activity { 
// getting SDcard root path 
File dir = new File(Environment.getExternalStorageDirectory() 
     .getAbsolutePath()); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.done_ui); 

    // at the end of oncreate 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      new ExplorerDBOperation().execute(); 

     } 
    }, 300); 
} 

class ExplorerDBOperation extends AsyncTask<Void, Boolean, Boolean> { 
    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = ProgressDialog.show(RemoveApkTraces.this, "Please wait", 
       "Processing........."); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     String Patternjpg = "hss"; 
     File listFile[] = dir.listFiles(); 
     if (listFile != null) { 
      for (int i = 0; i < listFile.length; i++) { 
       if (listFile[i].isDirectory()) { 

       } else { 
        if (listFile[i].getName().contains(Patternjpg)) { 
         // Do what ever u want 
         listFile[i].delete(); 
        } 
       } 
      } 
     } 
     return true; 
    } 

    @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
     if (dialog != null && dialog.isShowing()) { 
      dialog.dismiss(); 
     } 
    } 
} 

cevap

0

Sen ayıklamak gerekir Eğer yöntem ve kullanım özyineleme bir klasör bulunur (çağrı yöntemi kendisi):

String Patternjpg = "hss"; 

@Override 
protected Boolean doInBackground(Void... params) { 
    deleteFrom(dir); 
    return true; 
} 

private void deleteFrom(File dir) { 
    File listFile[] = dir.listFiles(); 
    if (listFile != null) { 
     for (int i = 0; i < listFile.length; i++) { 
      if (listFile[i].isDirectory()) { 
       // recursive call: 
       // if you find a folder, call method again! 
       deleteFrom(listFile[i]); 
      } else { 
       if (listFile[i].getName().contains(Patternjpg)) { 
        // Do what ever u want 
        listFile[i].delete(); 
       } 
      } 
     } 
    } 
} 

NOT:Ben test etmedim kod kendisi sadece anında yöntemi yazdı!

+0

@abbie not gördünüz mü? Şimdiye yakın bir ide yok ama sanırım sen fikir edinebilirsin .. düşünüyorum SO senin problemlerinle sana rehberlik etmektir, * lütfen-yaz-kodu-benim için * servis ... –

+0

hey evet ben Onu gördüm. Cevap için teşekkürler. Sadece şunu cevaplayabilir misin merak ediyorum:) http://stackoverflow.com/questions/36323872/copy-files-from-assets-folder-to-sd-card-in-android – abbie

0

Sen örnekte bu kodu var. Ya da çok derin dizin yapıları olabileceğinden korkuyorsanız, yinelemekten kaçınmak için Dir 'un bir listesini/yığınının tadını çıkarabileceğiniz bir liste/yığın elde edebilirsiniz.

+0

uhmm, bu satırdan sonra ne koymalıyım? :/ – abbie

+0

Eskiden "walkdir (listFile [i]); Dosyaları yeniden adlandırırken kullandığım satırdan sonra, bu durumda bana hata veriyor. Hızlı bir şekilde – abbie

+0

@abbie'yi çözdüğünüze şaşırdım, Jordis'e bir cevap verin, açık bir şekilde önerdiğim şeyi açıklıyor. – AnoE

İlgili konular