列出sdcard-android所有文件夹或子文件夹中具有特定扩展名的所有文件

列出sdcard-android所有文件夹或子文件夹中具有特定扩展名的所有文件,android,android-listview,Android,Android Listview,这似乎是一个老生常谈的问题,但我已经尝试了所有的解决方案,这似乎对我不起作用。我使用以下代码列出ListView中所有扩展名为.docx的文件。但是,由于某些原因,这不能正常工作,并且只列出根目录下的所有文件 在onCreate中: view = (LinearLayout) findViewById(R.id.view); //getting SDcard root path root = new File(Environment.getExternalStorageDire

这似乎是一个老生常谈的问题,但我已经尝试了所有的解决方案,这似乎对我不起作用。我使用以下代码列出ListView中所有扩展名为.docx的文件。但是,由于某些原因,这不能正常工作,并且只列出根目录下的所有文件

在onCreate中:

view = (LinearLayout) findViewById(R.id.view);

    //getting SDcard root path
    root = new File(Environment.getExternalStorageDirectory()
            .getAbsolutePath());
    getfile(root);

    for (int i = 0; i < fileList.size(); i++) {
        TextView textView = new TextView(this);
        if(!fileList.get(i).isDirectory() & fileList.get(i).getName().endsWith(".docx") || fileList.get(i).getName().endsWith(".doc")) {
            textView.setText((i+1)+". "+fileList.get(i).getName());

            Toast.makeText(this, fileList.get(j).getAbsolutePath(),Toast.LENGTH_LONG).show();
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                     .....
                }
            });
            view.addView(textView);
        }
        else { 
            getfile( new File(fileList.get(i).getAbsolutePath()));  // its directory so similar code but new filelist instance
            for (int k = 0; k < fileList.size(); k++) {
                //TextView textView = new TextView(this);
                if(!fileList.get(k).isDirectory() & fileList.get(k).getName().endsWith(".docx") || fileList.get(k).getName().endsWith(".doc")) {
                    textView.setText((k+1)+". "+fileList.get(i).getName());

                    Toast.makeText(this, fileList.get(j).getAbsolutePath(),Toast.LENGTH_LONG).show();
                    textView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                          ...
                        }
                    });
                    view.addView(textView);
                }
                else {

                }

            }
        }
view=(LinearLayout)findViewById(R.id.view);
//获取SD卡根路径
root=新文件(Environment.getExternalStorageDirectory()
.getAbsolutePath());
getfile(root);
对于(int i=0;i
getFile ArrayList函数:

public ArrayList<File> getfile(File dir) {
    File listFile[] = dir.listFiles();
    if (listFile != null && listFile.length > 0) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {

            } else {
                if (listFile[i].getName().endsWith(".docx")
                        || listFile[i].getName().endsWith(".doc"))
                {
                    fileList.add(listFile[i]);
                }
            }

        }
    }
    return fileList;
}
public ArrayList getfile(文件目录){
文件listFile[]=dir.listFiles();
if(listFile!=null&&listFile.length>0){
for(int i=0;i
使用内容解析器从MediaStore查询这样的mimetype是否更好?如果你想沿着目录树往下走,你需要在这里递归,而不是什么都不做:
if(listFile[i].isDirectory()){}
我尝试过这样做
else if(fileList.get(i).isDirectory(){getfile(新文件(fileList.get(i.getAbsolutePath());for(int k=0;k
,这对我没有帮助。