我正在尝试在我的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”开头)?
答案 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卡上(如果没有,则需要复制;如果是,我可以显示内容)。