2017-07-02 78 views
0

尝试了一段时间弄清这一点我自己后,它的时间来问你:社会!我确信解决方案应该放在另一篇文章的某个地方,但我根本找不到它(或将它应用到我的代码中)。的Android/Java的:内容的原始文件夹中的文件名数组

我要实现以下目标:当启动我的Android应用程序,我想打电话给其做的方法如下:

阅读所有文件名中的“资源/原材料”目录中,我已经储存了多jpegs,并将这些文件的名称存储到数组中。

我想这应该不是太难回答了,但我根本就不能由我自己看着办吧。我查看了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我设法解决我的问题,我设法得到它与下面的代码工作(图片现在存储在/资产/资源/):

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

你不能在你的项目结构类似这样的程序读取文件夹。在apk上,所有这些都是资源,而不是文件夹等文件系统中的文件... – Opiatefuchs

回答

3

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

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

更简单的解决办法是把这些东西搬到assets/。然后你可以使用AssetManagerlist()要收回这些资产的名称,并使用open()得到一个InputStream一个。虽然资产不是设备上的文件,但AssetManager API更像文件。

如果你要坚持原始资源,你将需要使用Java反射来遍历上R.raw定义为找到自己的资源ID的所有static字段,然后使用openRawResource()一个Resources()对象上得到InputStream

+0

谢谢,我设法解决我的问题,因为你可以在我的编辑中看到。你有任何提示简化代码? – daan166

+0

@ daan166:不是特别的,因为没有太多简化的代码。 – CommonsWare

相关问题