1

これに関する他のさまざまな投稿を読みましたが、私にとって有効な答えはまだ見つかりません。彼らは外部ストレージの使用について議論しており、「デフォルト」(内部) ストレージを使用する必要があります。

アクティビティ ルーチンの 1 つに非常に単純なルーチンがあります。

String PATH = "/data/data/com.mydomain.myapplicationname/files";
SystemIOFile.MkDir(PATH);  // Ensure Recipient Path Exists

そして、 SystemIOFile クラスで私は持っています

static public Boolean MkDir(String directoryName) 
  {
    Boolean isDirectoryFound = false;
    File Dir = new File(directoryName);
    if(Dir.isDirectory())
    {
      isDirectoryFound = true;
    } else {
      Dir.mkdirs();
      if (Dir.isDirectory()) 
      {
         isDirectoryFound = true;
      }
  }
  Dir = null;
  return isDirectoryFound;
}

そして私の Android.Manifest.xml には

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

したがって、これが機能するためのすべてのピースが整っているように見えます。

しかし、それは機能していません。
MKDir() ルーチンを 1 ステップ実行すると、常に失敗します。

if (Dir.isDirectory())

常にfalse
を返し 、その後のDir.mkdirs()は常にfalseを返します

私は何が欠けていますか?

4

2 に答える 2

2
"/data/data/com.mydomain.myapplicationname/files"

は外部ストレージ パスではありません。アプリケーションに割り当てられたストレージ パスを取得する必要があります。

Context c = /*get your context here*/;
File path = new File(c.getExternalFilesDir().getPath() + "/folder1/folder2/");
path.mkdirs();

アプリの内部ファイル スペースにアクセスする必要がある場合 (スペースにアクセスするアプリがそれを所有している場合)、ContextgetFilesDir(). これにより、アプリの内部ストレージの場所が返されます。

コードは基本的に同じです。

Context c = /*get your context here*/;
File path = new File(c.getFilesDir().getPath() + "/folder1/folder2/"); //this line changes
path.mkdirs();
于 2015-08-17T17:04:01.520 に答える
2

これは素晴らしい質問です。/sdcardまず、パスを直接参照しない方がよいでしょう。Environment.getExternalStorageDirectory().getPath()代わりに使用してください。/data/data第 2 に、独自のアプリのファイルにアクセスする場合、パスを直接参照する必要はありません。これは、マルチユーザー シナリオではパスが異なる可能性があるためです。Context.getFilesDir().getPath()代わりに使用してください。

上記を実装すると、次のことがわかります。

String PATH = "/data/data/com.mydomain.myapplicationname/files";
SystemIOFile.MkDir(PATH);

falseを返します。

String PATH = Environment.getExternalStorageDirectory().getPath() 
        + getApplicationContext().getFilesDir().getPath();
SystemIOFile.MkDir(PATH);

trueを返します。

Dir.mkdirs()insideの結果を無視したことにも注意してくださいBoolean MkDir(String directoryName)

お役に立てれば。

于 2015-08-17T17:31:08.040 に答える