mkdirs aways在Android 5.1中返回false

时间:2016-04-26 01:58:11

标签: android exception-handling

我搜索了这些问题,但无法解决它。请帮我解决这个问题

这是我的mkdir代码:

<% foreach(string s in Test1) { %>
    <div><%:s%></div>
<% } %>

我的manifest.xml:

File _sdcardPath = Environment.getExternalStorageDirectory(); // sdcard path is /storage/emulate/0
File _dirPath = new File(_sdcardPath, "CreateFolder");
boolean _isCreate = _dirPath.mkdir();
if (_isCreate) {
   tvResult.append(_dirPath + " mkdir success");
} else {
   tvResult.append(_dirPath + " mkdir fail");
}

我的设备Android版本是:5.1.1,12GB可用空间,代码在5.0下运行

在运行应用程序时,我遇到了这个异常:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.createfolder"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

4 个答案:

答案 0 :(得分:3)

OP记得在他/她的问题中添加例外。这个答案不再适用了。

-

您没有给它创建一个新文件夹。试试这个:

func testScheduleActionIsConnected() {
    XCTAssertTrue(checkActionForOutlet(controller.btnScheduleOrder, actionName: "scheduleOrder", event: UIControlEvents.TouchUpInside, controller: controller ))
}

答案 1 :(得分:2)

我发现你的代码没有任何问题。根据{{​​3}}和mkdir(),我认为该文件夹已存在。

  失败时

false 或目录已存在。

这意味着以下代码:

File _dirPath = new File(_sdcardPath, "CreateFolder");
boolean _isCreate = _dirPath.mkdir();

仅尝试(重新)创建现有文件夹/storage/emulate/0,因此返回false

要创建新文件夹,请尝试以下操作:

File _dirPath = new File(_sdcardPath + "/CreateFolder");
boolean _isCreate = _dirPath.mkdir();// this will create folder CreateFolder

this file doc

答案 2 :(得分:1)

检查/storage/emulate/0/CreateFolder之前是否存在mkdir,如下所示:

File _sdcardPath = Environment.getExternalStorageDirectory();
File _dirPath = new File(_sdcardPath, "CreateFolder");
final boolean dirExisted = _dirPath.exists();
if (dirExisted && _dirPath.isFile()) {
    _dirPath.delete();
}
if (dirExisted) {
    tvResult.append(_dirPath + " dir existed");
    return;
}
boolean _isCreate = _dirPath.mkdir();
if (_isCreate) {
    tvResult.append(_dirPath + " mkdir success");
} else {
    tvResult.append(_dirPath + " mkdir fail");
}

如果路径存在file,请尝试delete它。如果是dir,则无需再创建它。

答案 3 :(得分:1)

请检查DocumentFile以从Android 4.4及更高版本访问SD卡。详细信息请参见link