getCacheDir() ব্যবহার করে অ্যাপ্লিকেশন ক্যাশ ফোল্ডার পাথ বের করা
Android-এ প্রতিটি অ্যাপের একটি প্রাইভেট ক্যাশ ডিরেক্টরি থাকে যেখানে অস্থায়ী ফাইল সংরক্ষণ করা হয়। এটি Context.getCacheDir() মেথড দিয়ে পাওয়া যায়। সিস্টেম স্টোরেজ ফুল হলে এই ফাইলগুলো অটোমেটিক্যালি ডিলিট করতে পারে।
লেআউট (activity_main.xml)
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:padding="16dp"
android:textAlignment="center" />
</LinearLayout>
MainActivity.java
package com.example.myapplication;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
// ইন্টারনাল ক্যাশ ডিরেক্টরি
File cacheDir = getCacheDir();
String cachePath = cacheDir.getAbsolutePath();
// এক্সটার্নাল ক্যাশ ডিরেক্টরি (SD Card / External Storage)
File externalCacheDir = getExternalCacheDir();
String externalCachePath = (externalCacheDir != null) ? externalCacheDir.getAbsolutePath() : "Unavailable";
// ক্যাশ সাইজ ক্যালকুলেট (অপশনাল)
long cacheSize = getDirSize(cacheDir);
long externalCacheSize = (externalCacheDir != null) ? getDirSize(externalCacheDir) : 0;
String info = "Internal Cache Dir:\n" + cachePath +
"\n\nSize: " + formatSize(cacheSize) +
"\n\nExternal Cache Dir:\n" + externalCachePath +
"\n\nSize: " + formatSize(externalCacheSize) +
"\n\nNote: System may delete these files when storage is low.";
textView.setText(info);
}
// ডিরেক্টরি সাইজ রিকার্সিভলি ক্যালকুলেট
private long getDirSize(File dir) {
long size = 0;
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) size += file.length();
else size += getDirSize(file);
}
}
return size;
}
// বাইটকে মানব পঠনীয় ফরম্যাটে রূপান্তর
private String formatSize(long bytes) {
if (bytes < 1024) return bytes + " B";
int exp = (int) (Math.log(bytes) / Math.log(1024));
String unit = "KMGTPE".charAt(exp - 1) + "B";
return String.format("%.1f %s", bytes / Math.pow(1024, exp), unit);
}
}
ক্যাশ ডিরেক্টরির পার্থক্য
| টাইপ | মেথড | লোকেশন | ব্যাকআপ | অটো ক্লিন |
|---|---|---|---|---|
| Internal Cache | getCacheDir() | /data/data/pkg/cache | হ্যাঁ (Auto Backup) | হ্যাঁ (Storage Pressure) |
| External Cache | getExternalCacheDir() | /sdcard/Android/data/pkg/cache | না | হ্যাঁ (App Uninstall-এও ডিলিট) |
| Files Dir | getFilesDir() | /data/data/pkg/files | হ্যাঁ | না (Manual) |
| External Files | getExternalFilesDir() | /sdcard/Android/data/pkg/files | না | না (App Uninstall-এ ডিলিট) |
সর্বোত্তম অভ্যাস
- ক্যাশে বড় ফাইল (ইমেজ, ভিডিও) না রাখুন - ১০-৫০ MB লিমিট রাখুন
- LruCache বা DiskLruCache লাইব্রেরি ব্যবহার করুন ইমেজ ক্যাশিংয়ের জন্য
- WorkManager-এ PeriodicWorkRequest দিয়ে ক্যাশ ক্লিনআপ শিডিউল করুন
- সেনসিটিভ ডেটা ক্যাশে না রাখুন (ইনক্রিপ্ট করুন যদি জরুরি হয়)
