Android 4.4.2 File.mkdir()和mkdirs()正在创建文件而不是目录

问题描述 投票:3回答:2

这个问题与this question无关。我已经看过了,但它是SPECIFIC Android 4.4.2问题,因为代码在其他Android版本上运行良好。

final File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MY_Downloads");

        if (!path.exists()) {
            path.mkdir(); // also tried it with path.mkdirs();
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(path)));
        }

我正在使用此代码,它在Android 4.4.2上创建了一个FILE而不是一个文件夹。请帮助我已经读过这个article

我已授予以下权限

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

我知道如何访问SD卡以及有关公共目录的最新更改,但我想创建一个FOLDER而不是文件

android android-4.4-kitkat mkdir mkdirs
2个回答
1
投票

Android设备的前几代始终使用SD卡进行存储和访问只需使用SDK方法提供的路径

Environment.getExternalStorageDirectory()

很快,较新的设备开始出现大型内部存储分区,这些分区被映射为外部存储,以便调用环境等方法。

getExternalStoragePublicDirectory(String)

现在指向这个内部存储而不是物理SD卡。

一些最新的设备,如三星Galaxy Nexus甚至没有SD卡插槽。

refer this blog

我希望这有帮助。


0
投票

我在Android 4.4.2上遇到了同样的问题(这不是斜线问题)。

例如,如果我想创建此目录:

myRep/things/logs 

它将创建前2个目录,但“logs”将是一个文件,而不是目录。

我通过在日志之后添加另一个目录解决了:

myRep/things/logs/tmp

现在tmp是一个文件,但是日志最终是一个目录。

同样重要的是,在某些设备上,您需要在创建文件后执行其他操作,这对我有用:

File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + '/' + pathToDirectory + "/tmp");    
directory.mkdirs();
directory.setExecutable(true);
directory.setReadable(true);
directory.setWritable(true);
MediaScannerConnection.scanFile(context, new String[] {directory .toString()}, null, null);
© www.soinside.com 2019 - 2024. All rights reserved.