SAF DocumentFile - 检查路径是不是存在而不在每个文件夹级别创建每个 DocumentFile

Posted

技术标签:

【中文标题】SAF DocumentFile - 检查路径是不是存在而不在每个文件夹级别创建每个 DocumentFile【英文标题】:SAF DocumentFile - check if path exists without creating each DocumentFile at each folder levelSAF DocumentFile - 检查路径是否存在而不在每个文件夹级别创建每个 DocumentFile 【发布时间】:2016-10-24 07:09:36 【问题描述】:

成像,您想检查“/folder/subfolder/subsubfolder/test/test.txt”文件是否存在,您可以执行以下操作:

DocumentFile sdCard = ...; // i have already retrieved the sd card root with the users help via SAF

String path = "<SD CARD>/folder/subfolder/subsubfolder/test/test.txt";
List<String> pathParts = Arrays.asList(path.split("/"));
DocumentFile doc = sdCard;
// go through all folders, starting at sd card, to check, if the desired file exists
for (int i = 1; i < pathParts.size(); i++)

    DocumentFile nextDoc = doc.findFile(pathParts.get(i));
    if (nextDoc != null)
        doc = nextDoc;
    else
    
        doc = null;
        break;
    


if (doc == null)

    // file does not exist

else

    // file does exist

这很慢,有没有更快的方法至少检查 sd 卡上是否存在文件?我不想创建每个 DocumentFile 只是为了检查路径是否存在......

【问题讨论】:

如果您有解决方案? 没有比我的问题中发布的更好... 【参考方案1】:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    Uri uri = data.getData();
    DocumentFile pickedDir = DocumentFile.fromTreeUri(MainActivity.this, uri);
    String id = DocumentsContract.getTreeDocumentId(uri); 

    /* id is :  "primary:namefolder" if user select a "namefolder" from internal storage. 
     or CABB-5641 if user select external storage,
    */

    id = id + "/folder/subfolder/subsubfolder/test/test.txt";  // your path,  you must to ensure is consistent with that chosen by the user,

    Uri childrenUri = DocumentsContract.buildDocumentUriUsingTree(uri,id);
    DocumentFile chhildfile = DocumentFile.fromSingleUri(MainActivity.this,childrenUri);

    if(chhildfile != null && chhildfile.exists())
        Log.d("laporan file", "file ini ada");
    

我不是专家,我不知道这是否适用于大多数安卓,但我已经在安卓模拟器和华硕 Zenfone 5 中尝试过,希望这会有所帮助

【讨论】:

谢谢!我花了8个小时在这上面! SAF 真是一团糟!

以上是关于SAF DocumentFile - 检查路径是不是存在而不在每个文件夹级别创建每个 DocumentFile的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中从 File Api 迁移到 Storage Access Framework (SAF)

SAF(存储访问框架)是不是解决了 Android 4.4(KitKat)中的 SD 卡 WRITE 问题?

存储访问框架获取正确的 Uri 路径删除/编辑/获取文件

正确删除 DocumentFile(尊重 MediaStore)

是否可以从 DocumentFile 获取常规文件?

检查是不是给出完整路径