Android/Java: 内容原始文件夹的文件名到数组

Android/Java: filenames of contents raw folder to array

我自己想了很久之后,是时候问问你了:社区!我确定解决方案应该在另一个 post 中的某个地方,但我根本找不到它(或将它应用到我的代码)。

我想实现以下目标:启动我的 android 应用程序时,我想调用一个执行以下操作的方法:

读取"res/raw"目录下的所有文件名,其中我存放了几个jpeg,并将这些文件的名称存储到一个数组中。

我想应该不难回答,但我自己就是想不通。我查看了 listFiles() 命令,我想这是可行的方法,但我无法让它工作。在这里你会找到一段我的代码与相关行:

public class Example{
        File[] imageNames;
        public void onCreate(){
               scanFolder();
               useTheDataFromScanFolder();
        }

        public void scanFolder (){
               int numberOfFiles = new File("res\raw").listFiles().length;
               imageNames = new File("res\raw").listFiles();
        }

        useTheDataFromScanFolder(){
               //here I want to use numberOfFiles and the array imageId
        }
}

我希望你能解决我的问题,或者把我推向正确的方向!提前致谢!!

编辑: 感谢 CommonsWare,我设法解决了我的问题,我设法让它与以下代码一起工作(图片现在存储在 /assets/resources/ 中):

String [] fileList;    

public void onCreate(Bundle savedInstanceState) {
    listAssetFiles("resources");
}

public boolean listAssetFiles(String path) {
    try {
        fileList = getAssets().list(path);
    } catch (IOException e) {
        return false;
    }
    return true;
}

Read all filenames in the "res/raw" directory

Android 设备上没有 res/raw/ 目录。您的开发机器上的 Android 应用程序项目中可能有一个 res/raw/ 目录。资源不是设备上的文件,而是 APK 文件中的条目。因此,没有文件名。

更简单的解决方案是将这些东西移动到 assets/。然后,您可以使用 AssetManagerlist() 检索这些资产的名称,并使用 open() 获得其中一个的 InputStream。虽然资产也不是设备上的文件,但 AssetManager API 更像文件。

如果您想坚持使用原始资源,则需要使用 Java 反射遍历 R.raw 上定义的所有 static 字段以找到它们的资源 ID,然后使用openRawResource()Resources() 对象上获取 InputStream.