res/raw 目錄下的資源無法直接在代碼中動態列舉(無法獲取文件名列表)。官方建議:若需遍歷讀取原始文件,請將文件放入 assets 目錄,利用 AssetManager 實現。
AssetManager assetManager = getAssets();
try {
String[] files = assetManager.list(""); // 列出 assets 根目錄文件
for (String fileName : files) {
if (fileName.endsWith(".txt")) { // 可按需過濾
InputStream is = assetManager.open(fileName);
// 讀取流處理業務邏輯
is.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
| 特性 | res/raw | assets |
|---|---|---|
| 編譯時生成 R.id | 是 | 否 |
| 動態列舉文件名 | 不可 | 可 |
| 支持子目錄 | 否 | 是 |
| 適合場景 | 固定已知資源 | 動態/大量/結構化資源 |
只能在代碼中硬編碼資源 ID 列表,或通過反射遍歷 R.raw 類字段(不推薦,脆弱且受混淆影響)。
結論:需遍歷讀取時,請毫猶豫選 assets 目錄。