java - 如何使用 URI (Android) 创建目录?

标签 java android

在我的应用程序中,我想在选择的目录中创建子目录。我正在使用 SAF(存储访问框架):选择目录并创建一个子目录效果很好。

选择目录:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_PATH_TO_DATA);

创建子目录:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != Activity.RESULT_OK) {
        return;
    }

    if (requestCode == REQUEST_CODE_PATH_TO_DATA) {
        if (data == null) {
            return;
        }

        DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), data.getData());
        getActivity().grantUriPermission(getActivity().getPackageName(), data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        getActivity().getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        pickedDir.createDirectory("Portfolio");
        String pathToPickedDir = "";
        for (DocumentFile file : pickedDir.listFiles()) {
            if (file.isDirectory() && file.getName().endsWith("Portfolio")) {
                pathToPickedDir = file.getUri().toString();
            }
        }
    }
}

pickedDir 的 URI 是:

content://com.android.externalstorage.documents/tree/314E-7741%3ADCIM

创建的子目录“Portfolio”中的 URI 是:

content://com.android.externalstorage.documents/tree/314E-7741%3ADCIM/document/314E-7741%3ADCIM%2FPortfolio

然后,当我尝试在“Portfolio”中创建子目录时,我无法那样做,因为该目录是在最初选择的文件夹中创建的,而不是在“Portfolio”文件夹中创建的。

DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), pathToPickedDir);
pickedDir.createDirectory("Patient");

我做错了什么?感谢您的帮助。

最佳答案

我发现的唯一方法是使用“for”循环:

        for (DocumentFile file : pickedDir.listFiles()) {
            if (file.isDirectory() && file.getName().equals("Portfolio")) {
                file.createDirectory("Subdirectory");
            }
        }

关于java - 如何使用 URI (Android) 创建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45629624/

相关文章:

java - 通过代码动态选择 Spinner 中的项目

java - 如何计算 MethodVariableAccess 中的局部变量索引?

android - 运行模拟器时 SQLiteConnection 数据库泄漏

android - 如何从我的 Android 应用程序将短信转发给选定的联系人到 whatsapp?

android - 在 Eclipse 中找不到 com.google.android.maps

android - 更新 Activity 的 Intent

java - Android onConfigurationChanged 未被调用

java - bean 和 Jackson 库的问题

java - 如何将ImageIcon 添加到JDialog 中?

Android - 可扩展 ListView 的更好替代方案?