【问题标题】:SAF - Attempting to create again an existing folder/file yields a new folder/fileSAF - 尝试再次创建现有文件夹/文件会产生新文件夹/文件
【发布时间】:2019-09-25 08:51:05
【问题描述】:

SAF 是否打算在将来取代外部目录中的文件处理?

我希望最终不是这样,但我正在提前测试 SAF 本身。出于其他原因,它也会很有用。

假设我正在使用这种方法:

static public DocumentFile createFolderInFolder(Activity activity,String            parentFolderUriString,String folderName)
{
DocumentFile result=null;
ContentResolver contentResolver;
contentResolver = activity.getContentResolver();
Uri parentFolderUri=null;
Uri oldParentUri = Uri.parse(parentFolderUriString);
String id = DocumentsContract.getTreeDocumentId(oldParentUri);
parentFolderUri= DocumentsContract.buildChildDocumentsUriUsingTree(oldParentUri,id);
DocumentFile parentFolder = DocumentFile.fromTreeUri(activity, parentFolderUri);
result=parentFolder.createDirectory(folderName);
return result;
}

它在另一个目录中创建一个目录。

当尝试创建现有文件夹时,例如“folderName”,会创建一个具有相似名称“folderName (1)”的新文件夹。

有没有办法避免这种情况,这样如果存在新文件夹就不会创建? (文件也一样)

【问题讨论】:

    标签: android file directory subdirectory storage-access-framework


    【解决方案1】:

    parentFolderUri= DocumentsContract .buildChildDocumentsUriUsingTree(oldParentUri,id);

    为了在正确的目录中创建,应该是 .buildChildDocumentsUriUsingTree(oldParentUri,id + "/" + folderName);

    您还应该开始编写两个函数。一个检查目录是否存在,一个检查文件是否存在。

    要检查一个目录是否存在,你可以查询() (directory+dirName) uri 的内容提供者。如果出现异常,则目录不存在。

    对于文件存在,请尝试在文件 uri 上使用内容解析器的 OpenInputStream。如果它打开文件存在。如果出现异常,则该文件不存在。

    更新: 如果您想检查您使用 ACTION_OPEN_DOCUMENT_TREE 获得的路径中是否存在文件夹,您可以使用:

    static public boolean folderExists(Activity activity, String rootPath, String folderName)
    {
        return DocumentFile.fromTreeUri(activity, Uri.parse(rootPath)).findFile(folderName)!=null;
    
    }
    

    【讨论】:

    • 我的代码有效,它在正确的文件夹中创建了子文件夹。但是如果我尝试在同一个文件夹中创建同一个子文件夹,它会创建另一个后缀如 (1) 的子文件夹。它不像普通的文件系统。你的答案可能是针对这个问题:stackoverflow.com/questions/58006838/…
    • 是的,我知道它会创建另一个带有 (1) 的文件夹。这就是为什么您应该在尝试创建之前检查该文件夹是否已经存在。
    • 重复:要检查目录是否存在,您将查询()(目录+目录名)uri的内容提供者。如果出现异常,则目录不存在。
    • 为什么不回答另一个问题(使用一些代码)?所以我可以接受你的回答,你会得到一些积分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2020-01-28
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多