2011-11-29 3 views
1

내 응용 프로그램에 대해 응용 프로그램 기능을 재설정하려고하는데 files folder, databases foldershared preferences 등의 모든 파일을 내부 저장소에서 삭제하려고합니다. 문제는 이러한 폴더를 삭제하려고 시도 할 때마다 삭제되는 것이 아니라는 것입니다. 때로는 파일을 삭제하는 데 사용하는 함수가 false를 반환합니다. 이 경우 내 응용 프로그램이 제대로 작동하지 않을 수 있습니다. 여기에 내가 사용하고 무엇을 :데이터베이스 폴더 내부 저장소 삭제

@SuppressWarnings("static-access") 
public void deleteAllData(){ 

    String cache = this.getCacheDir().toString(); 
    Log.e("","dbPath : "+cache); 
    File ChFolder = new File(cache); 
    boolean cachee = deleteDirectory(ChFolder); 
    Log.e("","Database Folder Delete Success : "+cachee); 

    String server = rpc.getCurrentServerName(this); 
    int userId = rpc.getUserId(this); 

    String userDbPath = "/data/data/"+this.getPackageName()+"/databases/"+Integer.toString(userId)+"_"+server; 
    File userDbFile = new File(userDbPath); 
    boolean userDbFileTF = userDbFile.delete(); 
    Log.e("","user Database Folder : "+userDbFileTF); 

    String sysDbPath = "/data/data/"+this.getPackageName()+"/databases/stampii_sys_tpl.sqlite"; 
    File sysDbFile = new File(sysDbPath); 
    boolean sysDbFileTF = sysDbFile.delete(); 
    Log.e("","user Database Folder : "+sysDbFileTF); 

    // Delete Databases Folder : 
    String dbPath = "/data/data/"+this.getPackageName()+"/databases/"; 
    Log.e("","dbPath : "+dbPath); 
    File dbFolder = new File(dbPath); 
    boolean dbFold = deleteDirectory(dbFolder); 
    Log.e("","Database Folder Delete Success : "+dbFold); 


    // Delete Files Folder : 
    String name = this.getFilesDir().toString()+"https://stackoverflow.com/users/"; 
    Log.e("","path : "+name); 
    File files = new File(name); 
    boolean filesFol = deleteDirectory(files); 
    Log.e("","filesFol : "+filesFol); 

} 

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()); 
} 

는 내가 부족 뭔가 어떻게 너무 데이터베이스를 삭제합니다 안드로이드 설정에서 Clear Data 같은 기능을 구현할 수있다.

답변

1

삭제하려면 디렉토리가 비어 있어야합니다. 다음은 디렉토리에서 파일을 삭제 한 다음 디렉토리 자체를 삭제하는 방법의 예입니다.

http://www.rgagnon.com/javadetails/java-0483.html

+0

'deleteDirectory()'함수를 살펴보면 같은 방법을 사용하고 있습니다. –

+1

그래서 당신은 ... 당신이 삭제하려고하는 디렉토리와 그것의 내용을 기록하지 그래? 그런 다음 삭제할 때 파일을 기록하여 메서드가 작동하는지 확인하고 삭제하려고 할 때 디렉토리가 실제로 비어 있는지 확인합니다. – Craigy

+0

사실 저는 이것을하고 있어요. 항상 삭제할 때 가끔씩 삭제하려고 할 때 false를 반환합니다. 나는 특별한 일을하지 않기 때문에 그것이 작동하지 않는 이유를 알아낼 수 없습니다. –

2

다음 코드를 사용하십시오. 모든 데이터가 자동으로 삭제됩니다.