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

时间:2017-07-02 14:07:52

标签: java android arrays filenames

在尝试自己解决这个问题很长一段时间之后,是时候问你了:社区!我确定解决方案应该在另一篇文章的某个地方,但我根本找不到它(或将它应用到我的代码中)。

我想实现以下功能:启动我的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;
}

1 个答案:

答案 0 :(得分:3)

  

读取" res / raw"中的所有文件名目录

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

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

如果您想坚持原始资源,则需要使用Java反射来迭代static上定义的所有R.raw字段以查找其资源ID,然后使用openRawResource()获取Resources()的{​​{1}}对象。