【问题标题】:Android/Java: filenames of contents raw folder to arrayAndroid/Java:内容原始文件夹的文件名到数组
【发布时间】:2017-07-02 14:07:52
【问题描述】:

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

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

【问题讨论】:

  • 您不能像这样在项目结构中以编程方式读取文件夹。在 apk 上,所有这些都是资源,而不是像带有文件夹等的文件系统中的文件......

标签: java android arrays filenames


【解决方案1】:

读取“res/raw”目录下的所有文件名

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

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

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

【讨论】:

  • 谢谢,正如您在我的编辑中看到的那样,我设法解决了我的问题。您有任何简化代码的技巧吗?
  • @daan166:不是特别多,因为没有太多需要精简的代码。
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
相关资源
最近更新 更多