SAF - Попытка создать заново существующую папку / файл приводит к созданию новой папки / файла - PullRequest
0 голосов
/ 25 сентября 2019

Предназначен ли 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;
}

Он создает каталог внутри другого каталога.

При попытке создатьв существующей папке, например «имя_папки», создается новая папка с аналогичным именем «имя_папки (1)».

Есть ли способ избежать этого, чтобы новая папка не создавалась, если она существует??(И то же самое для файлов)

1 Ответ

0 голосов
/ 26 сентября 2019

parentFolderUri = DocumentsContract .buildChildDocumentsUriUsingTree (oldParentUri, id);

Для создания в правильном каталоге, который должен быть .buildChildDocumentsUriUsingTree (oldParentUri, id +)"+ имя_папки);

Далее вам следует начать программирование двух функций.Один, чтобы проверить, существует ли каталог, и один для существования файла.

Чтобы проверить, существует ли каталог, вы бы запросили () поставщика контента для (каталог + dirName) uri.Если вы получаете исключения, каталог не существует.

Для существования файла попробуйте использовать OpenInputStream преобразователя содержимого в файле uri.Если он открывается, файл существует.Если вы получаете исключения, файл не существует.

Обновление: если вы хотите проверить, существует ли папка в пути, который вы получили с помощью ACTION_OPEN_DOCUMENT_TREE, вы можете использовать:

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

}
...