将文件夹中的文件添加到android app

时间:2016-02-13 09:36:00

标签: java android list file android-sdcard

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

我的代码如下:

    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”开头)?

4 个答案:

答案 0 :(得分: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()));

答案 1 :(得分:0)

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

我希望你能阻止它。

答案 2 :(得分:0)

以下是基于文件名!!!!

对文件列表进行过滤的不同方法
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对象,然后您可以轻松地从中获取文件名! 希望这会有所帮助!!!

答案 3 :(得分:0)

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