在尝试自己解决这个问题很长一段时间之后,是时候问你了:社区!我确定解决方案应该在另一篇文章的某个地方,但我根本找不到它(或将它应用到我的代码中)。
我想实现以下功能:启动我的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;
}
答案 0 :(得分:3)
读取" res / raw"中的所有文件名目录
Android设备上没有res/raw/
目录。您的开发计算机上的Android应用程序项目中可能有res/raw/
目录。资源不是设备上的文件,而是APK文件中的条目。因此,没有文件名。
更简单的解决方案是将这些内容移至assets/
。然后,您可以使用AssetManager
和list()
来检索这些资产的名称,并使用open()
在其中获得InputStream
。虽然资产不是设备上的文件,但AssetManager
API更像文件。
如果您想坚持原始资源,则需要使用Java反射来迭代static
上定义的所有R.raw
字段以查找其资源ID,然后使用openRawResource()
获取Resources()
的{{1}}对象。