不兼容的类型:String无法转换为File

时间:2015-10-07 07:18:18

标签: java android

   GridView gv;
   ArrayList<File> list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_yearbook);

    list = imageReader (Environment.getExternalStorageDirectory().getAbsolutePath() + "/Mypath");

    gv = (GridView) findViewById(R.id.ImageGV);
    gv.setAdapter(new GridAdapter());
}


ArrayList<File> imageReader(File root) {

    ArrayList<File> a = new ArrayList<>();

    File[] files = root.listFiles();
    for (int i =0; i< files.length; i++) {
        if (files[i].isDirectory()) {
            a.addAll(imageReader(files[i]));
        }
        else {
            if ( files[i].getName().endsWith(".jpg")) {
                a.add(files[i]);
            }
        }
    }

    return a;
}

所以我试图让我的imageReader读取sdcard中的某个目录,以在我的程序中显示一系列图像。但是,我在第list = imageReader (Enviroment.getExternalStorageDirecctory().getAbsolutePath() + "/Mypath");行遇到错误,它表示java.io.file无法转换为java.io.string。我如何解决这个问题,我用谷歌搜索了几个小时,我真的找不到解决方案

3 个答案:

答案 0 :(得分:1)

这应该有效

list = imageReader(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Mypath"));

答案 1 :(得分:1)

使用带有两个参数的File的构造函数。第一个是目录,第二个是文件名或目标目录的名称

list = imageReader(new File(Environment.getExternalStorageDirectory(), "Mypath"))
这样,系统也会处理分隔符。还要注意

listFiles()可以返回null。所以你应该在开始循环之前检查空值

答案 2 :(得分:0)

尝试这样(你也需要处理异常):

try{

list = imageReader(new File(Environment.getExternalStorageDirectory(), "Mypath"));

}catch(FileNotFoundException ex){
  //ex handler code
}