SAF-尝试再次创建现有文件夹/文件会产生一个新的文件夹/文件

时间:2019-09-25 08:51:05

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

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)”的新文件夹。

有没有一种方法可以避免这种情况,以便在存在的情况下不创建新文件夹? (与文件相同)

1 个答案:

答案 0 :(得分:0)

  
    

parentFolderUri =文件合同       .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;

}