安卓开发无法创建文件夹

安卓开发无法创建文件夹
首先在xml添加了两行获得了权限

name="android.permission.WRITE_EXTERNAL_STORAGE"/>
name="android.permission.READ_EXTERNAL_STORAGE"/>

java代码中,获取外部存储,然后创建文件夹,在手机上调试时run窗口打印了create,可是没有打印file.getName(),手机上也找不到test文件夹。

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 222);

mCurrentfilr= Environment.getExternalStorageDirectory();
File file=new File(mCurrentfilr,"test");
if (!file.exists()) { //如果该文件夹不存在,则进行创建
    file.mkdirs();//创建文件夹
    Log.d("file", "create");
}
//如果该文件夹存在
if (file.exists()) { 
    Log.d("file", file.getName());
}

参考GPT和自己的思路:

根据你提供的代码和情况描述,我初步判断可能存在以下几个原因导致无法创建文件夹:

  1. 权限获取不完整:在xml中虽然已经添加了WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限,但在运行时需要调用requestPermissions方法进行动态权限申请,而你的代码中只请求了WRITE_EXTERNAL_STORAGE权限,导致获取的权限不完整,应该同时请求两个权限:
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 222);
  1. 文件夹路径错误:你的代码中使用了getExternalStorageDirectory()来获取外部存储路径,这会返回外部存储的根目录,而创建文件夹时路径应该加上相对路径,即在外部存储的根目录下创建一个名为test的文件夹,应该这样写:
File file=new File(mCurrentfilr,"/test");

注意,有些情况下由于系统对应用权限的限制,可能无法直接在根目录下创建文件夹,可以尝试在根目录下先创建一个名为"myApp"的文件夹,然后在其中创建test文件夹,具体代码如下:

mCurrentfilr= Environment.getExternalStorageDirectory();
File appDir = new File(mCurrentfilr, "myApp");
if (!appDir.exists()) {
    appDir.mkdir();
}
File file = new File(appDir, "test");
if (!file.exists()) { 
    file.mkdirs();
    Log.d("file", "create");
}
if (file.exists()) { 
    Log.d("file", file.getName());
}
  1. 外部存储没有挂载:有些手机在连接电脑时会以USB存储设备的形式挂载外部存储,此时无法进行文件的读写操作。应该先检查一下外部存储是否挂载,可以通过调用Environment.getExternalStorageState()方法来获取存储的状态。

希望以上建议能够帮助你排查问题并解决。

参考GPT和自己的思路:

根据您提供的信息,您已经在xml文件中添加了文件外部存储的权限,并且在Java代码中获取了外部存储的路径,并尝试创建一个名为“test”的文件夹。然而,您发现无法在手机上找到这个文件夹。

可能的原因有以下几点:

  1. 权限未被授予。 虽然您在xml文件中声明了外部存储的权限,但您仍需要在运行时请求权限。 您使用了ActivityCompat.requestPermissions()方法来请求权限,但是我建议您添加一个onRequestPermissionsResult()方法来处理权限请求的结果,以确保权限已被授权。 如果权限未被授予,则可能会导致无法创建文件夹。

  2. 外部存储不可用。您使用Environment.getExternalStorageDirectory()方法来获取外部存储路径,但是如果外部存储不可用,则可能导致无法创建文件夹。 您可以使用Environment.getExternalStorageState()方法来检查外部存储是否可用,并进一步处理错误。

  3. 文件夹已经存在。您在Java代码中检查文件夹是否存在,如果不存在则创建。 但是,如果该文件夹已经存在,则不会再次创建。 您可以使用file.isDirectory()方法检查文件夹是否已存在,并进行相应的处理。

请检查以上三点,并尝试重新运行您的应用程序来查看结果。 如果问题仍然存在,请提供更多关于应用程序环境和任何错误消息的详细信息,以便更好地帮助您解决问题。

是不是targetsdk设置的30,Android11不能直接操作file文件了,可以修改一下根目录的路径, Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/包名"

或者在application节点增加属性android:requestLegacyExternalStorage="true"

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^