如何创建文件夹(Android R - Api 30)?

8

我看到Android 11有作用域存储(scoped storage),但是我找不到任何相关信息,我该如何在 /storage/emulated/0/ 目录下创建和使用文件夹?旧的方法只适用于API 29及以下版本 :(


1
您可以在/storage/emulated/0/Documents和其他已知文件夹中创建文件夹。您可以像往常一样创建它们。 - blackapps
好的,非常感谢! - Fedor Sedov
谢谢@blackapps,但是在根目录中创建文件夹应该是不可能的,我是指不是在文档中吗? - Amir
4个回答

11

自从Android Q以来,我们可以在应用程序特定存储中创建文件夹。它的路径是:

Android-> data-> packagename-> files-> your folder

使用这个:

File file;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    file = new File (this.getExternalFilesDir(null) + path);
} else {
    file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + path);
}

if (!file.exists()) {
    file.mkdirs();
}

你的代码对我有效。谢谢。还有一件事:导致“null”的原因是什么? - Noor Hossain
类型为 directory_music、picture 等。请在此处阅读 https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String)。 - dimvolk

5

在Android 11中,访问外部存储的限制比Android 10少得多。

Environment.getExternalStorageDirectory()

现在可以阅读了。

Environment.getExternalStoragePublicDirectory(...)

Environment.DIRECTORY_DOCUMENTS这样的文件夹是可写的。

在大多数这些目录中,Android操作系统对文件使用正确的扩展名非常挑剔。


0

如果有人需要此代码片段,我将扩展接受的答案:

请注意,我在此处创建了两个文件,第一个是要写入文件的目录,第二个是文件本身。您必须检查目录是否存在并创建它,否则将抛出FileNotFoundException异常。

File videoFile;
File videoDir;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    //Android 11+
    videoDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), File.separator + "YOUR_DIRECTORY_NAME");
    videoFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "/YOUR_DIRECTORY_NAME/" + videoName);
} else {
    //Old Android version
    videoDir = new File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_MOVIES + File.separator + "YOUR_DIRECTORY_NAME");
    videoFile = new File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_MOVIES + File.separator + "YOUR_DIRECTORY_NAME" + File.separator + videoName);
}
if(!videoDir.exists()) {
    if(!videoDir.mkdir()) {
        infoSB("No Storage Permission");
        return;
    }
}
try {
    if(!videoFile.exists()) {
        FileOutputStream fos = new FileOutputStream(videoFile);
        fos.write(response);
        fos.close();
    }
} catch (IOException e) {}
                    

-2

步骤1:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

步骤2:

Environment.getExternalStorageDirectory().absolutePath + "/your_folder_name"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接