Android: mkdir 不工作

Android: mkdir not working

我想创建 MyFolder 目录,但是做不到,尝试了不同的方法,但没有人工作; 在 Androidmanifest.xml 我有:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.package" >
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.android.vending.BILLING" />

    <application
    <!---.....-->
</manifest>

静态class:

public static String FILES_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "MyFolder";

代码:

File dir = new File(Constants.FILES_DIR);
if (!dir.exists()) {
    dir.mkdir();
    Log.i("my tag", "isDirectory + " + dir.toString() + " | " + dir.exists() + " | " + dir.mkdir());
    dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "MyFolder");
    Log.i("my tag", "isDirectory + " + dir.toString() + " | " + dir.exists() + " | " + dir.mkdir());
    dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC), "MyFolder/");
    Log.i("my tag", "isDirectory + " + dir.toString() + " | " + dir.exists() + " | " + dir.mkdir());

    Log.i("my tag", "Status + " + Environment.getExternalStorageState());
    if (!dir.isDirectory()) return false;
}

和logcat:

    05-09 14:40:15.131    1453-1453/my.package I/my tag﹕ isDirectory + /storage/emulated/0/myFolder | false | false
05-09 14:40:15.131    1453-1453/my.package I/my tag﹕ isDirectory + /storage/emulated/0/myFolder | false | false
05-09 14:40:15.136    1453-1453/my.package I/my tag﹕ isDirectory + /storage/emulated/0/Music/myFolder | false | false
05-09 14:40:15.136    1453-1453/my.package I/my tag﹕ Status + mounted
05-09 14:40:17.261    1453-1453/my.package I/my tag﹕ isDirectory + /storage/emulated/0/myFolder | false | false
05-09 14:40:17.261    1453-1453/my.package I/my tag﹕ isDirectory + /storage/emulated/0/myFolder | false | false
05-09 14:40:17.261    1453-1453/my.package I/my tag﹕ isDirectory + /storage/emulated/0/Music/myFolder | false | false
05-09 14:40:17.266    1453-1453/my.package I/my tag﹕ Status + mounted

我也尝试了 mkdirs();,带斜线和不带斜线的路径,Google 它..最后 我绝望了

当我手动创建文件夹并尝试将文件保存到其中时,我收到权限错误 - 打开失败:EACCES(权限被拒绝)

在我的一个开源项目中,我使用以下 class 来获取 SD 卡目录。这只是一个简单的帮助程序,对于任何其他 SD 卡目录或特殊目录,应该很容易修改它。

/**
 * http://developer.android.com/training/basics/data-storage/files.html
 *
 * @param albumName
 * @return
 */
public static File getAlbumStorageDir(String albumName) {
    // Get the directory for the user's public pictures directory.
    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        //This is also the case if the directory already existed
        Log.i("wall-splash", "Directory not created");
    }
    return file;
}

在创建文件时,我有以下代码:

File dir = Utils.getAlbumStorageDir("wall-splash")
//create the file
File file = new File(dir, fileName);
if (!file.exists()) {
    file.createNewFile();
}

您正在测试的设备是什么?它有外部存储吗?有自定义 ROM 吗?


尝试重新启动您的设备,以确保之前的尝试没有阻止任何内容。