40

私はこれに夢中です:

Log.d("STATE", Environment.getExternalStorageState());
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "work_data");
Log.d("PATH", f.getAbsolutePath());
if (!f.exists()) {
    Log.d("MAKE DIR", f.mkdirs() + "");
}

出力ログは次のようになります。

STATE     mounted
PATH      /mnt/sdcard/DCIM/work_data
MAKE DIR  false

正しい権限を追加したことを確認しました:

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

しかし、なぜフォルダを作成できなかったのかわかりません。mkdir()ステップバイステップも使用しましたが、結果は同じです。私を助けてください。私はあまりにも多くのことをグーグルで検索し、このばかげたことに少なくとも 2 日間費やしました。ご協力いただきありがとうございます!!

編集:

みんなごめんなさい!タグに追加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>しました。<application>これは私の間違いでした!でも皆さん回答ありがとうございます。

4

15 に答える 15

63

私は同じ問題を抱えており、パーミッションタグを適切な場所に配置したと確信していますが、mkdirs はまだ機能していません。私のシステムは Android 6.0 です。今は解決しています。以下のように確認できます。

  1. 許可タグを必ず入れてください。
  2. 電話で「設定/アプリケーション」を開き、アプリケーションの許可を確認します(マニフェストステートメントの許可がここにないことがわかりました)、このように許可のスイッチを開きます(「mkdirs」を作成するデフォルトで閉じられていることがわかりました失敗した)

ここに画像の説明を入力

于 2016-06-13T02:59:02.663 に答える
31

私は同じ問題を抱えており、答えを見つけるために1週間すべてを検索しました. 私はそれを見つけたと思いますし、ばかばかしいほど簡単だと思います.uses-permissionステートメントを適切な場所に配置する必要があります...

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

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

<application></application> セクション内にあると、機能しませんでした。

于 2011-11-18T11:59:54.517 に答える
16

これは古い投稿であることは知っていますが、おそらく私の答えが誰かを助けることができます.

この問題に数日対処した後、電話が PC に接続されている間 (開発中は常にそうなります)、SD カードが利用できないことに気付きました。したがって、その上にディレクトリまたはファイルを作成しようとすると失敗します。「簡単」にするために、テスト対象の電話に応じて動作が異なるように見えました。

ばかげた問題に聞こえるかもしれませんが、他の人が節約できるかもしれない多くの時間がかかりました。

于 2012-10-23T14:08:57.607 に答える
6

mkdirs() only returns true if the directory was created. If it is in place already, it should return false. So I would bet this directory already exists.

于 2011-08-27T05:51:00.673 に答える
2

あなたのコードは私にとっては問題なく動作しています。コードに問題はありません。f.mkdir()代わりに1つのディレクトリを使用している場合f.mkdirs() 、フォルダーは次の場所にありますmnt => Sd card => DCIM => work_data

于 2011-08-27T05:02:09.983 に答える
2

Android 6.0 以降を使用している場合は、gradle ファイルのターゲット SDK が 22 未満であることを確認してください。

targetSdkVersion 22

または、実行時のアクセス許可を実装する必要があります。

于 2016-09-22T19:51:41.713 に答える
2

これを置く

Log.d("MAKE DIR", f.mkdir() + "");

それ以外の

Log.d("MAKE DIR", f.mkdirs() + "");

またはこれを試してください

String s=Environment.getExternalStorageDirectory().toString()+"/";
File f = new File(s+"DCIM/work_data");
于 2011-08-27T04:40:36.637 に答える
1

これは将来誰かを助けるかもしれません。

問題は、アドレス「/File/Address/」を書き込むことである可能性もあります。

File.separator + "File" + File.separator + "Address" + File.separator

これはとても小さくて愚かなことですが、何時間も時間を無駄にした後、これはうまくいきました。

于 2014-12-16T22:07:29.517 に答える
0

mkdirs() が false を返し続けたときに、外部ストレージ 'Test/Test1/Test2' に一連のサブフォルダーを作成しようとしました。「Test」は、外部ストレージのルートにあるフォルダーの予約語であることが判明しました。これは Motorola G (XT1541) でのもので、他のデバイスにも当てはまる可能性があります。

于 2018-06-05T05:50:50.430 に答える