【问题标题】:Kotlin: How to create/append file (and share)Kotlin:如何创建/附加文件(和共享)
【发布时间】:2019-08-08 20:52:02
【问题描述】:

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

这是我现在拥有的:

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())
}

它不会抛出异常,但我在文件系统中找不到该文件。我正在使用物理平板电脑进行测试/调试。我已经检查了我的应用程序的 com.... 文件夹。

【问题讨论】:

    标签: android android-studio kotlin file-io


    【解决方案1】:

    我在文件系统中找不到文件

    使用 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() 将自动关闭PrintWriterPrintWriter 为您提供了一个更自然的 API 来写出文本。

    【讨论】:

      【解决方案2】:

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

      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 
      */
      
      
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 你能展示如何使用 getExternalFilesDir() 吗? Andorid Dev 说它返回一个 File[] ,其中包含我的应用程序可以创建持久文件的绝对路径。不太确定 File[] 是什么,或者如何将它与另一个函数一起使用。或者,调用 getExternalFilesDir() 后使用哪个函数。
        猜你喜欢
        • 2018-02-27
        • 1970-01-01
        • 2021-12-16
        • 1970-01-01
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        相关资源
        最近更新 更多