Kotlin:如何 create/append 归档(和共享)

Kotlin: How to create/append file (and share)

我的应用程序中有一个数据数组列表,我现在想将其写入文件 (csv) 并使用第 3 方应用程序(例如电子邮件)共享此 csv 文件。我没有找到任何有用的资源来在 Kotlin 中创建文件、查找文件路径和附加到文件。有没有人有这方面的经验或有例子可以指出?只是为了开始,我正在尝试编写 header 并关闭文件,以便我可以看到它正在正确写入。

这是我目前拥有的:

val HEADER = "ID, time, PSI1, PSI2, PSI3, speed1, speed2, temp1, temp2"
val filename = "export.csv"

var fileOutStream : FileOutputStream = openFileOutput(filename,Context.MODE_PRIVATE)

try {
    fileOutStream.write(HEADER.toByteArray())
    fileOutStream.close()
}catch(e: Exception){
    Log.i("TAG", e.toString())
}

它没有抛出异常,但我在文件系统中找不到该文件。 testing/debug 我正在使用实体平板电脑。我已经检查了我的应用程序的 com.... 文件夹。

openFileOutput() 创建一个私有文件,可能在应用存储中。默认情况下这些文件不可浏览。如果你想创建一个可以浏览的文件,你需要 WRITE_EXTERNAL_STORAGE 权限,并且需要将文件创建到一个目录中,例如 getExternalFilesDir()

提供的目录

I cannot find the file in the file system

使用 Android Studio 的设备文件资源管理器并查看 /data/data/.../files/,其中 ... 是您的应用程序 ID。

此外,您可以将代码写得更简洁一点:

try {
    PrintWriter(openFileOutput(filename,Context.MODE_PRIVATE)).use {
        it.println(HEADER)
    }
} catch(e: Exception) {
    Log.e("TAG", e.toString())
}

use() 会自动关闭 PrintWriter,而 PrintWriter 让您更自然地写出文字 API。

看起来有很多方法可以创建文件并附加到文件中,具体取决于您正在开发的最低 API 版本。我正在使用最小 Android API 22。create/append 文件的代码如下:

val HEADER = "DATE,NAME,AMOUNT_DUE,AMOUNT_PAID"

var filename = "export.csv"

var path = getExternalFilesDir(null)   //get file directory for this package 
                                       //(Android/data/.../files | ... is your app package)

//create fileOut object
var fileOut = File(path, filename)

//delete any file object with path and filename that already exists
fileOut.delete()

//create a new file
fileOut.createNewFile()

//append the header and a newline
fileOut.appendText(HEADER)
fileOut.appendText("\n")


/*
    write other data to file 
*/