无法在外部存储中更新文件
File cannot be updated in external storage
我在存储中有一个文件,我正在尝试将数据写入该文件。但是抛出异常os。
val file = File(myFilePath)
val data : String = my_data
var bW: BufferedWriter
try {
bW = BufferedWriter(FileWriter(file, true));
bW.write(data);
bW.newLine();
bW.flush();
bW.close();
} catch (e: Exception) {
Log.d("log", "error = $e")
}
我遇到的错误
java.io.FileNotFoundException: /storage/emulated/0/Download/myFolder/myFile.txt: open failed: EACCES (Permission denied)
我已将文件放在上面的路径中,并且我 cross 经常检查该文件是否存在。但是我不知道为什么我得到 FileNotFoundException
。
我的 Android 版本是 10 QP1A
,我使用的是移动设备 redmi note 8 pro
。
我尝试了所有存在的解决方案(5 到 8 岁),但没有任何效果。
对于API 29 (Android 10),
确保您已 android.permission.WRITE_EXTERNAL_STORAGE
获得授权。
将 android:requestLegacyExternalStorage="true"
添加到清单文件中的应用程序元素。 Reference
例如
AndroidManifest.xml
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
...
android:requestLegacyExternalStorage="true">
...
</application>
</manifest>
MyActivity.kt
...
val permissionStatus = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
if(permissionStatus == PackageManager.PERMISSION_GRANTED) {
lifecycleScope.launch(Dispatchers.IO) {
writeToFile()
}
} else {
ActivityCompat.requestPermissions(this@MainActivity,
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
PERMISSION_REQUEST_CODE)
}
...
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
lifecycleScope.launch(Dispatchers.IO) {
writeToFile()
}
}
}
...
@WorkerThread
private fun writeToFile() {
val file = File(<myFilePath>)
val data = <my_data>
with(BufferedWriter(FileWriter(file, true))) {
write(data)
newLine()
flush()
close()
}
}
}
我在存储中有一个文件,我正在尝试将数据写入该文件。但是抛出异常os。
val file = File(myFilePath)
val data : String = my_data
var bW: BufferedWriter
try {
bW = BufferedWriter(FileWriter(file, true));
bW.write(data);
bW.newLine();
bW.flush();
bW.close();
} catch (e: Exception) {
Log.d("log", "error = $e")
}
我遇到的错误
java.io.FileNotFoundException: /storage/emulated/0/Download/myFolder/myFile.txt: open failed: EACCES (Permission denied)
我已将文件放在上面的路径中,并且我 cross 经常检查该文件是否存在。但是我不知道为什么我得到 FileNotFoundException
。
我的 Android 版本是 10 QP1A
,我使用的是移动设备 redmi note 8 pro
。
我尝试了所有存在的解决方案(5 到 8 岁),但没有任何效果。
对于API 29 (Android 10),
确保您已
android.permission.WRITE_EXTERNAL_STORAGE
获得授权。将
android:requestLegacyExternalStorage="true"
添加到清单文件中的应用程序元素。 Reference
例如
AndroidManifest.xml
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
...
android:requestLegacyExternalStorage="true">
...
</application>
</manifest>
MyActivity.kt
...
val permissionStatus = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
if(permissionStatus == PackageManager.PERMISSION_GRANTED) {
lifecycleScope.launch(Dispatchers.IO) {
writeToFile()
}
} else {
ActivityCompat.requestPermissions(this@MainActivity,
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
PERMISSION_REQUEST_CODE)
}
...
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
lifecycleScope.launch(Dispatchers.IO) {
writeToFile()
}
}
}
...
@WorkerThread
private fun writeToFile() {
val file = File(<myFilePath>)
val data = <my_data>
with(BufferedWriter(FileWriter(file, true))) {
write(data)
newLine()
flush()
close()
}
}
}