首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历DocumentFile树

遍历DocumentFile树
EN

Stack Overflow用户
提问于 2021-08-28 03:12:08
回答 1查看 87关注 0票数 3

我试图递归地遍历Android DocumentFile树,但我无法获得要为子文件夹返回的文件列表。当我在文件夹URI上尝试listFiles()时,我得到了每次返回的根文件的列表。

为什么这不起作用?

代码语言:javascript
复制
package com.example.usbfoldertest;

import androidx.appcompat.app.AppCompatActivity;
import androidx.documentfile.provider.DocumentFile;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "USBFolderTest";
    private static final int RQS_OPEN_DOCUMENT_TREE = 2;

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

        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
        startActivityForResult(intent, RQS_OPEN_DOCUMENT_TREE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(resultCode == RESULT_OK && requestCode == RQS_OPEN_DOCUMENT_TREE){
            Uri uriTree = data.getData();
            Log.d(TAG, "WalkTree: " + uriTree.toString() );

            WalkTree( uriTree );
        }
        super.onActivityResult(requestCode,resultCode,data);
    }

    private void WalkTree( Uri uriTop ) {

        Log.d( TAG, "LoadFileList: " + uriTop.toString() );

        DocumentFile documentFile = DocumentFile.fromTreeUri(this, uriTop);
        DocumentFile files[]      = documentFile.listFiles();

        if( files == null ) {
            Log.d( TAG, "files is null in LoadFileList()" );
        } else {
            for( DocumentFile f : files ) {

                if( f.isDirectory() ) {

                    Log.d( TAG, "FOLDER: " + f.getName());

                    if( f.getName().toLowerCase().contains("lost.dir") ) {
                        Log.d( TAG, "IGNORE LOST.DIR");
                    } else {
                        // Recurse into the folder..
                        WalkTree( f.getUri() );
                    }

                } else {
                    Log.d( TAG, "FILE: " + f.getName());
                }
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-28 03:18:51

看起来升级文档文件库可以解决这个问题。我将这段代码添加到我的build.gradle中,它现在可以正常工作了:

代码语言:javascript
复制
implementation 'androidx.documentfile:documentfile:1.0.1'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68961074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档