安卓:列出assets子文件夹中的文件列表

14

我创建了一些文件夹在assets中。每个文件夹都包含了我想要列出的文件。我正在使用以下代码,但是我总是得到fileList的空值。谢谢。

我使用了listFiles("/assets/images/","nothing");

private void listFiles(String dirFrom, String dirTo) {


        File f = new File(dirFrom);

        String fileList[] = f.list();

            if (fileList != null)
            {   
                for ( int i = 0;i<fileList.length;i++)
                {
                    Log.d("",fileList[i]); 
                }
            }
    }    
3个回答

27

你可能想要这样做:

private void listFiles(String dirFrom) {
        Resources res = getResources(); //if you are in an activity
        AssetManager am = res.getAssets();
        String fileList[] = am.list(dirFrom);

            if (fileList != null)
            {   
                for ( int i = 0;i<fileList.length;i++)
                {
                    Log.d("",fileList[i]); 
                }
            }
    }

如果你想列出图片,那么你的函数调用应该是:listFiles("images")


如何获取文件名? - Shihab Uddin
@The_Lazy_Man,你想要的不就是 AssetManager.list() 方法返回的字符串数组吗? - user
是的,你说得对。但我现在遇到了新问题。无法获取资源ID来初始化ImageView。因为asset文件没有提供给我那个。感谢你的回复。 :) - Shihab Uddin
@The_Lazy_Man 资源文件没有ID,你必须使用AssetManager的方法并自己构建位图(然后将其设置到ImageView上)。 - user
嗨,我会按照你的要求进行操作。完成后我会给你反馈。 - Shihab Uddin
字符串数组fileList = am.list(dirFrom); 此外,即使未找到文件或路径不存在,fileList始终不为null,但可能会引发异常。因此,应该用try catch语句包围它。 - Raphael C

7

最简单的方法肯定是这样的:

String[] fileList = getAssets().list("images");

0
改进版的@user的答案,使用Kotlin [递归]
fun listAssetFiles(context: Context, path: String,block:(isDir:Boolean,path:String)->Unit):Boolean{
    try {
        val list = context.assets.list(path)
        list?.also {files->
            if (files.isNotEmpty()) {
                for (file in files) {
                    val relativePath=if (path.isEmpty()) file else "$path${File.separatorChar}$file"
                    if (!listAssetFiles(context,relativePath,block))
                        block.invoke(false,relativePath) else block.invoke(true,relativePath)
                }
            } else return false
        }
    } catch (e: IOException) {
        return false
    }
    return true
}

如何使用:
    val fileList = mutableListOf<String>()
    val folderList = mutableListOf<String>()
    listAssetFiles(getApplication(), "my/sample/folder") // or empty for the root folder 
    { isDir, path ->
        if (isDir) folderList.add(path) else fileList.add(path)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接