반응형
1. 모든 파일 삭제
Code
public void iconAllCacheDelete(Context context){
try {
String cachePath = context.getCacheDir().getAbsolutePath() + "//shortcut";
File storage = new File(cachePath);
if(storage != null && storage.exists()){
deleteCache(storage);
}
} catch (Exception e){
Log.e(TAG,"iconAllCacheDelete : " + e.getMessage());
}
}
public static boolean deleteCache(File dir){
if(dir != null && dir.isDirectory()){
String[] children = dir.list();
for(String child : children){
try {
boolean isSuccess = deleteCache(new File(dir, child));
if(!isSuccess){
return false;
}
}
catch (Exception e){
e.printStackTrace();
return false;
}
}
}
return dir.delete();
}
해당 폴더 내의 모든 파일을 삭제한다. deleteCache는 해당 폴더내의 파일을 삭제하는 로직이다. for반복문으로 재귀함수를 사용하였으며 해당 폴더 내의 폴더가 존재하면 내부에 존재하는 폴더 내의 파일도 삭제 한다. cachePath를 변경하면 경로 변경이 가능하다.
2. 특정 기간 이후 파일 삭제
Code
public void iconCacheDelete(Context context){
try {
String cachePath = context.getCacheDir().getAbsolutePath() + "//shortcut";
File targetFile = null;
File folderSize = new File(cachePath);
File[] storage = new File(cachePath).listFiles();
long now = System.currentTimeMillis();
long oneMonth = 30*24*60*60*1000;
// long test = 2*60*1000;
if(storage.length <= 50){
return;
}
for(File file : storage){
if(now - oneMonth > file.lastModified()){
targetFile = file;
}
if(targetFile != null){
targetFile.delete();
}
if(folderSize.listFiles().length <= 50){
break;
}
}
} catch (Exception e){
Log.e(TAG,"iconCacheDelete : " + e.getMessage());
}
}
특정 기간 이후에 생성된 파일을 오래된 순으로 50개 이상부터 삭제한다. Cache는 앱폴더 내부에 파일을 저장하는 로직이므로 일정 기간 이후에 삭제되는 로직을 사용해야 앱내에 데이터를 관리할 수 있다. oneMonth는 한달을 의미하고 한달 이후(30일)의 데이터를 50개 이상 넘어갔을 시 순차적으로 삭제한다.
Reference
반응형
'Android > Android Java' 카테고리의 다른 글
[Android Java] Shortcuts (1) | 2023.11.03 |
---|---|
[Android Java] File.mkdir()과 File.mkdirs()의 차이 (0) | 2023.11.03 |
[Android Java] Bitmap을 PNG 파일로 Cash 저장하기 (0) | 2023.11.02 |
[Android Java] Bitmap 이미지 원형으로 자르기 (0) | 2023.11.02 |
[Android Java] Bitmap을 Drawable로, Drawable을 Bitmap으로 변환 (2) | 2023.11.02 |