2

他にも同じ質問をしている人がたくさんいますが、投稿された解決策はどれも役に立ちませんでした。

Androidアプリから外部ストレージに(バイナリ)ファイルを書き込もうとしています。マニフェストに入れ<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />ましたが、それでもファイルを作成できません。私がファイルを作成するために使用しているコードは

File folder = new File(Environment.getExternalStorageDirectory(), SAVE_DIRECTORY);
File toWrite = new File(folder, "save.bin");
if(!toWrite.exists()){
    try {
        if(!folder.mkdirs())
            Log.e("Save", "Failed to create directories for save file!");
        toWrite.createNewFile();
     } catch (IOException e) {
         Log.e("Save", "Failed to create save file! " + e.getMessage());
     }
 }

の呼び出しはmkdirs()失敗し、(ディレクトリが存在しないため、ENOENT)がcreateNewFile()スローされます。IOException

誰もが何が起こっているのか知っていますか?デバイスを再起動してみました。違いがあれば、Nexus7のAPIレベル8を使用しています。

4

3 に答える 3

5

まず、ExternalStorageStateを確認する必要があります

public static boolean isSDCARDAvailable(){
   return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}

このメソッドisSDCARDAvailableが戻るtrue場合は、コードを使用してください

権限を追加します。

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

于 2012-08-15T03:22:32.657 に答える
2

ドキュメントによると、APIレベル19以降、getExternalFilesDir(String)およびgetExternalCacheDir()によって返されるアプリケーション固有のディレクトリ内のファイルの読み取り/書き込みにWRITE_EXTERNAL_STORAGEは必要ありません。ただし、そこにファイルを書き込みたくなく、代わりにgetExternalStorageDirectory()にファイルを書き込みたい場合は、API 23以降では、requestPermissions()を使用して実行時にアクセス許可を要求する必要があります。それを行うと、getExternalStorageDirectory()でディレクトリを作成することができました。

于 2017-01-01T18:13:50.007 に答える
1

私もこの問題に悩まされていて、すべてがアプリで適切に構成されていました。つまり、外部ストレージの読み取りと書き込みのアクセス許可がありました。

私の問題は、ファイルを保存するためのパスを作成する方法にありました。

private val LOG_BASE_PATH = Environment.getExternalStorageDirectory().path + "myFolder"

次のように「/」を含める必要があることに注意してください。

private val LOG_BASE_PATH = Environment.getExternalStorageDirectory().path + "/myFolder/"

これがないと、フォルダを作成できません。Androidは失敗しないので、電話の構成やアプリの権限に問題があると思われるかもしれません。

理想的には、これは誰かが貴重な時間を節約するのに役立ちます。

于 2018-03-05T15:45:16.017 に答える