Android SAF - метод проверки существования папки всегда выдает «true» - PullRequest
0 голосов
/ 19 сентября 2019

Мое приложение Android должно проверить, присутствует ли в файловой системе подпапка (родительская папка была выбрана пользователем).Следующий код предназначен для выполнения проверки:

static public boolean folderExists(Activity activity,String folderUriString)
{
    ContentResolver contentResolver;
    contentResolver = activity.getContentResolver();

    Log.d("folder name",folderUriString); // it's content://com.android.providers.downloads.documents/tree/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2Faccesspoint1/subfoldername
    Uri folderUri = Uri.parse(folderUriString);
    boolean isTreeUri=DocumentsContract.isTreeUri(folderUri);
    boolean exists = DocumentFile.fromTreeUri (activity,folderUri).exists();

    Log.d("is treeUri",String.valueOf(isTreeUri)); //true
    Log.d("folder exists",String.valueOf(exists)); //true

    return exists;
}

Этот код не работает, поскольку он возвращает истинное значение, если папка не существует (никогда не создавалась, не создавалась и не удалялась), даже если родительский объектсама папка не существует.Я использую приложение файловой системы на своем устройстве для проверки каталогов.Какой правильный код?

1 Ответ

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

Работает следующий код (с некоторыми самоочевидными строковыми методами, которые я поместил в отдельный класс):

static public boolean folderExists(Activity activity,String folderUriString)
{
    ContentResolver contentResolver;
    contentResolver = activity.getContentResolver();
    String parentFolderUriString=StringUtils.fromLastSlashLeft(folderUriString);
    String folderName=StringUtils.fromLastSlashRight(folderUriString);
    Uri parentFolderUri=Uri.parse(parentFolderUriString);
    boolean exists;
    DocumentFile docFile=DocumentFile.fromTreeUri(activity,parentFolderUri).findFile(folderName);
    exists= (null!=docFile);
    return exists;
}
...