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)”的新文件夹。
有没有一种方法可以避免这种情况,以便在存在的情况下不创建新文件夹? (与文件相同)
答案 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;
}