前提・実現したいこと
Environment.getExternalStorageDirectory().getAbsolutePath()で取得できるフォルダにファイルを保存したいです。
環境
- Windows 10
- Kotlin
試したこと
特定のURLからファイルをダウンロードした後、Environment.getExternalStorageDirectory().getAbsolutePath()で取得できるフォルダにファイルを書き込もうとしています。
以下のコードだと
Kotlin
1fun outputFile(url: String) { 2 runBlocking { 3 val url = URL(url) 4 val connection: HttpURLConnection = url.openConnection() as HttpURLConnection 5 connection.setRequestMethod("GET") 6 connection.connect() 7 8 var downloadFile = File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/download.zip") 9 // ダウンロード 10 val downloadFileinputStream: InputStream = connection.getInputStream() 11 downloadFile.outputStream().use { fileOut -> 12 downloadFileinputStream.copyTo(fileOut) 13 //上の行でjava.io.FileNotFoundException: /storage/emulated/0/download.zip: open failed: EACCES (Permission denied) 14 } 15 }
となり、エラーになってしまいます。
そこで一旦別ファイルに保存した後にコピーする以下に変えてみたのですが、
Kotlin
1fun outputFile(url: String) { 2 runBlocking { 3 val url = URL(url) 4 val connection: HttpURLConnection = url.openConnection() as HttpURLConnection 5 connection.setRequestMethod("GET") 6 connection.connect() 7 8 // 別のところに一旦保存 9 val path = this.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)?.path 10 var tempFile = File(path + "/download.zip") 11 12 // ダウンロード 13 val downloadFileinputStream: InputStream = connection.getInputStream() 14 tempFile.outputStream().use { fileOut -> 15 downloadFileinputStream.copyTo(fileOut) 16 // 上の行でエラーにならなくなった 17 } 18 // 本命のファイルを別で生成 19 var downdloadFile = File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/download.zip") 20 // 本命にtempファイルからコピーする 21 File(tempFilePath).copyTo(File(downdloadFile), true) 22 //上の行でjava.io.FileNotFoundException: /storage/emulated/0/download.zip: open failed: EACCES (Permission denied) 23 }
となり、うまくいきません。
Environment.getExternalStorageDirectory().getAbsolutePath()で取得できるフォルダにファイルを保存する場合、どのようにすればいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/12 06:30
2020/11/12 08:56