2015-05-09 431 views
-1

我想创建MyFolder目录,但不能做到这一点,尝试过不同的方式,但没有人工作; 在AndroidManifest.xml中我有:Android:mkdir无法正常工作

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

静态类

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();,用斜线和无,谷歌终于it..and ,我渴望

当我手动箱文件夹,并试图保存文件到路径,我收到权限错误 - 打开失败:EACCES(拒绝)

+0

尝试File dir = new File(FILES_DIR); – Jamil

+0

@Softcoder FILES_DIR是一个常数,放在不同的类中,我把它放在一起。在logcat中,我们可以看到路径是正确的 – IceJOKER

回答

1

在我的一个开源项目中,我使用以下类来获取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?


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

+0

,因为U可以在logcat中看到 - Environment.getExternalStorageState()是MOUNTED。 / Samsung Galaxy s4 – IceJOKER

+0

@IceJOKER你也有READ_EXTERNAL_STORAGE权限吗?编辑:忽略此评论“任何声明WRITE_EXTERNAL_STORAGE权限的应用程序都被隐式授予此权限。” – mikepenz

+0

@IJJER并且文件未被创建。 (你刚才提到日志显示它不在那里,但也许它是创建的)。作为额外的事情,你可以尝试创建目录并创建一个新文件来检查它是否在那里。 – mikepenz