Java 无法在Android 11中创建文件夹(目录),如何创建?

Java 无法在Android 11中创建文件夹(目录),如何创建?,java,android,directory,android-file,Java,Android,Directory,Android File,我无法使用java在Android 11设备中创建文件夹。我使用了这段代码 File file = new File(Environment.getExternalStorageDirectory() + "/folderName/folderName1"); if (!file.mkdirs()) { file.mkdirs(); } String filePath = file.getAbsolutePath()

我无法使用java在Android 11设备中创建文件夹。我使用了这段代码

 File file = new File(Environment.getExternalStorageDirectory() + "/folderName/folderName1");
        if (!file.mkdirs()) {
            file.mkdirs();
        }
String filePath = file.getAbsolutePath() + File.separator + "demoName";
        Log.i("filePath",filePath.toString());

上面日志语句的输出是
/storage/emulated/0/folderName/folderName1/demoName
,但当我检查手机时,没有创建这样的文件夹

我只是想确认一下,我已经做了研究,并且确实在清单文件中包含了我需要包含的所有内容

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在应用程序标记内部的正确位置

这就是我从链接下载PDF的方法

File File=new文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u DOCUMENTS)+“/Aide Memoire”);
公共无效下载书籍(字符串url、字符串标题){
DownloadManager.Request=newdownloadmanager.Request(Uri.parse(url));
String testitle=title.trim();
请求设置标题(TENTITLE);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB){
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.request.VISIBILITY\u VISIBLE\u NOTIFY\u完成);
}
字符串filePath=file.getAbsolutePath();
Log.i(“filePath”,filePath.toString());
setDestinationNexternalPublicDir(文件路径,testitle+“.pdf”);
Toast.makeText(这个“保存到”+文件路径,Toast.LENGTH_SHORT.show();
下载管理器下载管理器=(下载管理器)getSystemService(Context.DOWNLOAD\u服务);
setMimeType(“application/pdf”);
request.allowScanningByMediaScanner();
request.setAllowedNetworkTypes(DownloadManager.request.NETWORK_MOBILE | DownloadManager.request.NETWORK_WIFI);
downloadManager.enqueue(请求);
}
下载书(“链接”、“文件名”);
运行上述程序后,我得到一个错误,日志显示

java.lang.IllegalStateException: Not one of standard directories: 

现在,如何在Android 11的内部存储中创建一个自定义文件夹而不出错?

您是否在运行时检查存储权限? 以下是谷歌在android 11中更改的api 30存储访问:


正如您在函数名上看到的,这就是所谓的外部存储

但在安卓11设备上,您无法在外部存储的根目录上创建自己的子目录


而是在已经存在的一个公共目录(如Documents、DCIM、Pictures等)上执行此操作

请求旧版外部存储仅适用于Android 10设备。
request.setDestinationInxternalPublicDir(filePath,entitle+“.pdf”)
不要乱用文件类路径
request.setdestinationnexternalpublicdir(Environment.DIRECTORY.DOCUMENTS,entitle+“.pdf”)
request.setdestinationnexternalpublicdir(Environment.DIRECTORY.DOCUMENTS,Aide Memoire/”+entitle+“.pdf”)
。那么,这是否表明文件(主要是文档)是只能在DOCUMENTS文件夹中下载,而不能在DOCUMENTS文件夹中的嵌套文件夹中下载?为什么要问?你没看到我也用了“备忘录”吗?你不是都试过了吗?为什么不报告它是否有效呢?我使用了
File File File=new File(Environment.DIRECTORY\u ALARMS+“/folderName/folderName1”),而不是
Environment.getExternalStorageDirectory()但它没有在公用目录中创建文件夹。怎么做?当然不是,那不是有效的路径。您可以在检查文件.getAbsolutePath()时轻松看到它。和文件。exists()<代码>文件目录=新文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_报警),“folderName/folderName1”)请注意,Android 11对文件扩展名非常挑剔。例如,您不能在报警公共目录中创建扩展名为.pdf的文件。mp3是可能的。您的代码确实在文件夹中创建了一个新目录,并且考虑到您的建议,对于PDF,我选择documents文件夹,但是当我下载文件时,我得到一个错误,这是logcat所说的
java.lang.IllegalStateException:不是标准目录之一:/storage/emulated/0/Documents/My Custom Folder
,应用程序会崩溃,因此不会存储任何内容。**不是**我如何解决这个问题,以便下载的pdf存储在
/storage/emulated/0/Documents/My Custom Folder中
在帖子中发布下载代码。我们怎么知道你在做什么?是的,我知道,但这没有好处。
java.lang.IllegalStateException: Not one of standard directories: