在Nexus 5上的Android中创建文件夹

时间:2015-11-27 18:18:35

标签: java android file android-studio mkdir

此问题重复或重复三次,但我无法创建文件夹! 我已经在本网站上阅读了其他问题。 我在manifest.xml中添加了权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.example.val.scemo">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>`

我的代码是这样的(我尝试了所有内容,我已经从本网站的答案中复制了代码):

File logFile = new File(LOG_PATH);
boolean a = false;
a = logFile.getParentFile().mkdirs();
Log.d("Creare: ", "Directory creata? " + a);
 ///////////////////////////////////////////////////
File folder = new File(Environment.getExternalStorageDirectory() + File.separator + "TollCulator");
boolean success = true;
if (!folder.exists()) {
    Log.d("Creare: ", "Riprovo ");
    success = folder.mkdir();
    Log.d("Creare: ", "Fatto ");
}
if (success) {
    Log.d("Creare: ", "Cartella creata!1 ");
    // Do something on success
} else {
    Log.d("Creare: ", "FAIL1 ");
    // Do something else on failure
}

/////////////////////////////////////////////////////

folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Example");
boolean success1 = true;
if (!folder.exists()) {
    success1 = folder.mkdirs();
}
if (success1) {
    Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_LONG).show();
    Log.d("Creare: ", "Cartella creata!2 ");
} else {
    Toast.makeText(getApplicationContext(), "Failure", Toast.LENGTH_LONG).show();
    Log.d("Creare: ", "FAIL2 ");
}

全都失败了。我哪里错了? 抱歉我的英文。

3 个答案:

答案 0 :(得分:0)

尝试以下方法:

File file = new File (Environment.getExternalStorageDirectory().getPath() + File.separator + "FolderName");
if (!file.isDirectory ()) {
    file.mkdirs();
}

答案 1 :(得分:0)

解 我已经将sdk目标的版本从23更改为21。 现在还有另一个错误: 错误:(2)检索项目的父项时出错:找不到与给定名称匹配的资源&#39; android:Widget.Material.Button.Colored&#39;。 在build.grandle中的行: 编译&#39; com.android.support:support-v4:23.0.1&#39; 我已经在sdk 23恢复了我已同步项目并且现在正常工作。

答案 2 :(得分:0)

这是由Android 6.0 Marshmallow中的运行时权限引起的。 WRITE_EXTERNAL_STORAGE 属于危险权限列表。我们需要在每次读/写操作之前检查权限。

int permissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);

要在运行时请求权限,请检查以下链接: https://developer.android.com/training/permissions/requesting.html

Arpit Patel在这里解释得非常好:https://stackoverflow.com/a/37358852/5460053

并且你没有得到任何例外,因为 File.mkdir() File.mkdirs()在失败时不会抛出IOException。

摘自文档: File.mkdir() does not throw IOException

更多详情:https://developer.android.com/reference/java/io/File.html#mkdir()