从Android内部存储读取文件

3
我已经将一个名为test.txt的文本文件放置在我的平板电脑\Tablet\Android\data\my.app.package\files\data中,并且Windows也可以确认该文件的存在。
Kotlin抛出了一个异常(FileNotFound),我也尝试指定我认为是真实路径的文件,但是无法通过以下路径找到它:"/0/Android/data/my.app.package/files/data/test.txt"(我的应用程序数据目录)。这个目录肯定存在,因为我可以在设备文件管理器中看到它。
这个文件包含两行文本,我正在尝试读取这些行以运行基于它们的特定任务。我尝试使用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")
    }

}

非常感谢您的帮助。


这个目录肯定不存在。/storage/emulated/0/Android/... 存在。请查看 getExternalFilesDir(null) 获取该路径。 - blackapps
2个回答

3
  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”吗?只是想更好地理解。谢谢! - Lorenzo Battilocchi
1
@LorenzoBattilocchi 是的,那就是我所指的。Android有filesDircacheDir用于访问内部存储。如果您有任何问题,请告诉我;) - Arrowsome
太棒了!我今天才了解“设备浏览器”功能!非常感谢! - Lorenzo Battilocchi
1
@LorenzoBattilocchi 没关系,你可以阅读那篇文章,它真的很棒 ;) - Arrowsome
谢谢!有像你这样随时准备分享他们丰富知识的人真是太好了! - Lorenzo Battilocchi

0
context.openFileInput(fileName).use { stream ->
   stream.bufferedReader().use { it.readText() }
}

为什么您更喜欢这个答案而不是被接受的答案? - Jeremy Caney
@JeremyCaney 使用lambda表达式可以使代码更易读和理解,尽管接受的答案显示了错误处理。我不确定这是否相同,因为我个人以前从未尝试过使用lambda表达式。 - Lorenzo Battilocchi

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