【问题标题】:How to specify path to read a .txt file in assets directory如何指定路径以读取资产目录中的 .txt 文件
【发布时间】:2021-04-15 17:21:55
【问题描述】:

我想获取有关所选港口的详细信息,方法是从使用 readLines 从 .txt 文件中提取的列表中获取 val s,其中每个港口在 assets 目录中都有一个 .txt 文件。我生成了文件名,但是当应用程序在模拟器中运行时,我得到一个找不到文件的错误。 在这种情况下,我试图获取一个名为 Brehatharm.txt 的文件

 var portChosen = "Brehat"
        //"tide2a/app/src/main/assets/"+//various paths to try 
fileName = "assets/"+portChosen+"harm.txt"
val harmConsList:List<String> = File(fileName).readLines()

        val portDisplayName = harmConsList[0]
        val longTude = harmConsList[1]
        val MTL =harmConsList[2]
etc,

日志猫读到:-

2021-01-10 15:40:34.044 7108-7108/com.example.tide2a E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.tide2a, PID: 7108
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tide2a/com.example.tide2a.MainActivity}: java.io.FileNotFoundException: assets/Brehatharm.txt: open failed: ENOENT (No such file or directory)

文件的完整 Windows 路径是:- C:\Users.......\OneDrive\Coding projects\tide2a\app\src\main\assets\Brehatharm.txt

我确定文件在那里,并且拼写正确,所以我怀疑我指定的路径不正确。请给我建议。

【问题讨论】:

    标签: android-studio kotlin android-assets readlines


    【解决方案1】:

    assets/ 中的文件无法使用 File 类访问。使用context.assets获取AssetManager,即可打开文件的InputStreams。

    【讨论】:

    • 我阅读了 Files 文档,在我看来,如果我指定了完整的 winodws/Linux 路径,Files 似乎可以读取 .txt 文件,但这不会有任何好处,因为我不能确定它们将在其他设备上的相同位置可用。我正在尝试 FileReader 和 BufferedReader
    • AFAIK,无法在编译时知道文件路径,以便能够使用 File 类访问与您的应用程序打包的文件。确定绝对路径的标准可能因 Android 版本甚至手机型号而异。你想做什么不能用 InputStream 做?您可以使用 /assets 中文件的 InputStream 将其副本写入内部存储中的文件,然后使用 File 类从那里访问它。 Android 提供了context.filesDir 来获取可以传递给 File 构造函数的内部目录的父路径。
    • TBH 我对上下文或 InputStream 知之甚少,我一直在努力寻找避免它们的简单方法。我没有成功,所以我只好回去学习了。感谢您的帮助
    • 上下文是 Android 上任何东西的基础,所以你必须尽快了解它是什么。您可以很容易地从 InputStream 中读取:context.assets.open(fileName).bufferedReader().readLines() 等同于您在上面的代码中尝试使用 File 执行的操作。
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多