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
*/
我的应用程序中有一个数据数组列表,我现在想将其写入文件 (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
*/