【问题标题】:Android 4.4.2 File.mkdir() and mkdirs() are creating file instead of directoryAndroid 4.4.2 File.mkdir() 和 mkdirs() 正在创建文件而不是目录
【发布时间】:2014-04-06 22:32:35
【问题描述】:

此问题与this question 无关。我已经看到了,但它是特定的 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)));
        }

我正在使用此代码创建一个 FILE 而不是 Android 4.4.2 上的文件夹。请帮助我已经读过这个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 卡以及有关公共目录的最新更改,但我想创建一个文件夹而不是文件

【问题讨论】:

    标签: android android-4.4-kitkat mkdir mkdirs


    【解决方案1】:

    前几代 Android 设备一直使用 SD 卡进行存储,访问它只需使用 SDK 方法提供的路径即可

    Environment.getExternalStorageDirectory()

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

    getExternalStoragePublicDirectory(String)

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

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

    refer this blog

    希望对你有所帮助。

    【讨论】:

    • 亲爱的谢谢我只想创建一个文件夹而不是一个文件。我已阅读此内容,并且相同的代码适用于 Android 4.3(内部 sd 卡与您所说的相同)
    • 在 KitKat 上,这两种方法都返回到 /storage/emulated/0 的路径,该路径位于内部存储器中。如果我强制在 /storage/external_SD/Android/data//files/Pictures 中创建一个目录,那么 files 在 Windows 上是一个文件,但是使用 ES3 或 Wifi File transfer 它是一个目录。
    • 我在最后用“/storage/external_SD/Android/data//files/dummy//”尝试了两个斜线技巧,它现在创建了一个在Windows上可见的目录文件,但 dummy 仍然是一个文件。对我来说已经足够了 :)) stackoverflow.com/questions/13953744/…
    • @Zekitez 我也做了“假”把戏。这是唯一的办法。太糟糕了,经过数小时的测试,我读到了您的评论,并在之前发现了这个技巧……您应该对此做出回答,因为它是问题的实际解决方案。好的,我正在为其他人做答案。
    【解决方案2】:

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

    例如,如果我想创建这个目录:

    myRep/things/logs 
    

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

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

    myRep/things/logs/tmp
    

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

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

    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);
    

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多