将文件夹中的文件添加到 android 应用中的列表

Adding files from folder to the list in android app

我正在尝试在我的 SD 卡中创建一个文件列表(然后从该列表中随机获取一个文件)。
我已阅读教程,但其中 none 有效。

我的代码如下:

    try{

    File file=new File("/sdcard");
    File[] list = new File ("/sdcard").listFiles();
    ArrayList<String> lista = new ArrayList<String>();
    for (File f : list){
         if (f.isFile()){
          if (f.getName().startsWith("aa")){
            lista.add(f.getName());
                                           }            
                        }
                       }
    Random gen = new Random();
    String s = lista.get(gen.nextInt(lista.size()-1)).toString();
    wyswietl.setText(s);

    }catch(NullPointerException e){
        Log.e("nope", e.getMessage());
    }

LogCat 显示异常。

我检查了每一行 - 当我尝试显示 lista.size() - 它抛出 ResourcesNotFoundException。
有意思的是,把String改成

String s = lista.get(1).toString()

有效 - 它显示了文件夹中的文件之一。
所以我的问题是:如何解决这个问题并在 /sdcard 文件夹中获取文件列表(以 "aa" 开头)?

如果lista.size () 等于 0 则可能发生异常... (因为 gen.nextInt (-1) )

希望大家预防。

如果你想在数组列表中随机选择一个项目,我相信它应该是

String s = lista.get(gen.nextInt(lista.size()));

Random.nextInt(int n) 检索 0-(n-1) 之间的随机值。参见 Random.nextInt() documentation

ResourceNotFound 异常我认为与无法在 R.java 内找到资源 ID 而非索引超出范围异常有关。

TextView.setText() 带有整数值参数,将整数值解释为资源 ID,see here。所以如果你打电话给

atextView.setText(lista.size());

它会抛出 ResourceNotFoundException 因为它可能没有指向正确的资源 ID。如果要显示列表中的项目数,则

atextView.setText(String.valueOf(lista.size()));

这是根据文件名过滤文件列表的不同方法!!!!

File f = new File("/sdcard");
    String fileList[];


    if(f.isDirectory()){
      fileList = f.list(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub                  
                if (name.startsWith("aa")){
                    return true;
                }
                return false;
            }
        });

'FileList' 是一个数组,您可以在其中获取所有 File 对象,然后您可以轻松地从中获取文件名!!!! 希望这会有所帮助!!!

我找到了此代码不起作用的解决方案。这些文件还不在文件夹中 - 我必须手动将名称添加到列表中,然后在其他功能中检查它们是否在 sdcard 上(如果不在,则需要复制;如果是,我可以显示内容)。