【问题标题】:Reading file from android Internal storage从android内部存储读取文件
【发布时间】:2020-09-13 08:27:30
【问题描述】:

我在my Tablet\Tablet\Android\data\my.app.package\files\data 中放置了一个名为test.txt 的文件,其中包含几行文本。这是由 Windows 报告的。

Kotlin 抛出异常 (FileNotFound),我也尝试指定我认为是文件的真实路径,但似乎无法使用以下路径获取它:

"/0/Android/data/my.app.package/files/data/test.txt"(我的应用程序的数据目录)。这个目录肯定存在,因为我可以在设备文件管理器中看到它。

此文件包含 2 行文本,我试图读取这些文本以根据它们的值运行特定任务。我尝试过使用 BufferedReader,但出现 FileNotFound 异常...

这是我的代码:

fun readFile() {
    val yourFilePath = "/0/Android/data/my.app.package/files/data/test.txt"
    val yourFile = File(yourFilePath)

    print(yourFile.name)
    val file = File(yourFilePath)
    file.bufferedReader().forEachLine {
        println("value = $it")
    }

}

非常感谢任何帮助。谢谢!

【问题讨论】:

  • This directory definitely exists 。不,它不存在。 /storage/emulated/0/Android/... 存在。查看该路径的 getExternalFilesDir(null)。

标签: android kotlin bufferedreader filenotfoundexception


【解决方案1】:
  1. filesDir 指向内部存储文件目录
  2. use 块在你想自动关闭流时很好。
  3. try-catch 块来处理任何 IO 异常,例如FileNotFoundException。
try {
    val file = File(filesDir, "test.txt")
    if (file.exists()) {
        file.bufferedReader().useLines {
            ...
        }
    }
} catch (e: IOException) {
    ...
}

更深入了解的好文章:Medium

通过以下方式查看您的内部存储以确保您的文件存在:

AndroidStudio -> View -> Tools Windows -> Android Device Explorer

【讨论】:

  • 当您说“内部存储文件目录”时,您的意思是“/0/Android/data/my.app.package/files/data”?只是想更好地理解。谢谢!
  • @LorenzoBattilocchi 是的,这就是我所指的。 Android 有filesDircacheDir 用于访问内部存储。如果您有任何问题,请告诉我;)
  • 太棒了,我今天才知道“设备资源管理器”功能!谢谢一百万!
  • @LorenzoBattilocchi 欢迎您,您可以阅读那篇文章,它真的很棒;)
  • 谢谢!像您这样的人随时准备分享他们的丰富知识真是太好了!
【解决方案2】:
context.openFileInput(fileName).use { stream ->
   stream.bufferedReader().use { it.readText() }
}

【讨论】:

  • 为什么你更喜欢这个而不是接受的答案?
  • @JeremyCaney 使用 lambda 可以使代码更具可读性和可理解性,尽管接受的答案显示了错误处理。我不确定这是否一样,因为我个人之前从未尝试过 lambdas。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
相关资源
最近更新 更多