Java mkdir()创建的目录被视为文件

Java mkdir()创建的目录被视为文件,java,android,Java,Android,我有个问题。我正在尝试为用户数据更改应用程序目录的名称。我在代码中更改它,然后从手机中删除它,以检查应用程序是否创建了具有正确名称的新应用程序。然后麻烦就开始了。目录已创建,但当我尝试在windows资源管理器中打开目录时,它被视为一个文件mkdir()为每个目录返回true 当我选中Environment.getExternalStorageDirectory().canWrite()时,它也会返回true。我的gradle配置 compileSdkVersion 23 min

我有个问题。我正在尝试为用户数据更改应用程序目录的名称。我在代码中更改它,然后从手机中删除它,以检查应用程序是否创建了具有正确名称的新应用程序。然后麻烦就开始了。目录已创建,但当我尝试在windows资源管理器中打开目录时,它被视为一个文件
mkdir()
为每个目录返回
true

当我选中
Environment.getExternalStorageDirectory().canWrite()
时,它也会返回
true
。我的
gradle
配置

  compileSdkVersion 23    
  minSdkVersion 23    
  targetSdkVersion 23 
(我想降级到MinsdkVersion21)。在清单中,我有:

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

更新:现在我没有权利在外部存储器上写东西。当我将
minSdk
更改为21,将
targetSdk
更改为22时,我拥有权限,但即使使用您的提示,我仍然无法创建目录

问题就在这里

File appDir = new File (path,file_name);

File appDir = new File (Environment.getExternalStorageDirectory(),"Trainer app");
这个
appDir.mkdir()
将在存储目录的默认路径下创建一个名为
Trainer app
的文件

因此,您希望创建类似于
Environment.getExternalStorageDirectory()/Trainer-app
的目录,然后像这样做

String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Trainer app/";

File dictionary = new File(path);
if (!dictionary.exists()) {
   dictionary.mkdirs();
}
以后创建文件的步骤

File file1 = new File(dictionary, filename);

更新:您需要实现运行时权限模型以获得用户访问存储的权限,请尝试此

,它在JAVA中是否被视为目录?是的,当我调用
isDirectory()
时返回true更新更像是权限问题。检查这些如何工作,自api 23和之前(不同的要求),谢谢我会检查it@matejko219将运行时权限模型添加到应用程序并解决问题,只需google即可this@matejko219你可以接受我的回答来感谢我,表示感谢的最佳方式之一是:)@matejko219尝试此链接并将其添加到您的项目中I快速添加此解决方案,授予权限后,文件夹现在已创建(权限问题已解决),但仍在windows资源管理器中它被视为一个文件。很明显,请按照相同的过程创建新文件夹并解决问题
File file1 = new File(dictionary, filename);