安卓:将文件保存到设备共享目录

3

我可以将一些数据保存到文件中

    val byteArrayOutputStream = ByteArrayOutputStream()
    byteArrayOutputStream.writeTo(openFileOutput("FILENAME", Context.MODE_PRIVATE))
    val data = byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    byteArrayOutputStream.write(data)
    byteArrayOutputStream.close()

我想将它保存到某个共享文件夹中,而不是我的应用程序目录中。


在 Android 9 及以下版本中,您可以使用外部存储。但是,在 Android 10 及更高版本中,默认情况下无法在那里写入。请使用存储访问框架(例如 ACTION_CREATE_DOCUMENT)允许用户选择您应该写入内容的位置。 - CommonsWare
2个回答

1

解决了!

val file = File(Environment.getExternalStorageDirectory(), "myfile.txt")
FileOutputStream(file).use {
  it.write("ASDFGHJKL".toByteArray())
}

你还需要请求运行时权限

if (PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE)) {
  ActivityCompat.requestPermissions(this, arrayOf(WRITE_EXTERNAL_STORAGE), 1)
} else {
  createFile()
}

...

 override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        if (requestCode == 1) {
            if (grantResults[0] == PERMISSION_GRANTED) {
                createFile()
            } else {
                // разрешение не получено
            }
        }
    }

1
这在Android 10及更高版本中无法使用。权限已经不再被广泛使用了。我目前正在努力重新编写我的代码,以使用共享存储和内容提供程序 :( https://developer.android.com/training/data-storage/shared - user960914

0
如果你想要访问外部存储,那么可以尝试使用android.os.Environment.getExternalStorageDirectory()。

好的,我使用FileOutputStream(File(Environment.getExternalStorageDirectory(),"myfile.txt")),它可以创建文件。但是当我写入数据时,文件是空的。 - MaxAstin
当我写入数据时,它是空的。你的意思是:当我读取数据时,它是空的吗?你用什么读取文件?文件大小是多少字节? - blackapps
我不读这个文件。我只是在我的设备上的“我的文件”中找到它,而且它是0 b。 - MaxAstin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接