首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在尝试读取文件时,我一直收到java.io.FileNotFoundException

在尝试读取文件时,我一直收到java.io.FileNotFoundException
EN

Stack Overflow用户
提问于 2018-07-29 04:28:25
回答 3查看 1.8K关注 0票数 -1

我是Android开发和Kotlin的新手,所以作为一个项目,我想在Android Studio中制作一个货币转换器。为此,我在我的assets文件夹中保存了一个货币列表文件,并希望读取该文件并将内容放入微调器中。下面是我的代码:

代码语言:javascript
复制
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Spinner
import java.io.File
import java.io.InputStream
import java.util.*

class currency_converter : AppCompatActivity() {
    lateinit var currency_1: Spinner
    lateinit var currency_2: Spinner

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_currency_converter)


        val inputStream: InputStream = File("currency_list.txt").inputStream()
        val currency_list = mutableListOf<String>()

        inputStream.bufferedReader().useLines { lines -> lines.forEach { currency_list.add(it) } }

        currency_1 = findViewById(R.id.currency_1) as Spinner
        currency_2 = findViewById(R.id.currency_2) as Spinner

        currency_1.adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, currency_list)
        currency_2.adapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, currency_list)

    }
}

当我通过我的手机运行完整的模拟器时,它会打开,但当我点击currnecy转换器时,它会崩溃,并得到错误:

java.io.FileNotFoundException: currency_list.txt (没有这样的文件或目录)

如果能帮到我做错了什么,我将不胜感激。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-29 04:40:44

您必须使用assets打开该文件:

代码语言:javascript
复制
val inputStream: InputStream = assets.open("currency_list.txt")
票数 2
EN

Stack Overflow用户

发布于 2018-07-29 04:46:58

要从文件中读取,请确保您的文件位于资源文件夹中。您将需要创建此文件。它会在你的java和res文件夹旁边。

代码语言:javascript
复制
assets/my_file.json
java/...
res/...

现在,我还建议对您尝试读取的任何文件使用json。这将使它变得更快,也将使它对您来说非常容易。

您将得到一个类似以下内容的文件。其中有一个对象(花括号)数组(方括号)。然后,您可以创建对象,就像在代码中设置对象一样。

代码语言:javascript
复制
{
    "currencies": [
        {
            "name": "USD",
            "value": 1.0
        },
        {
            "name": "CAD",
            "value": 0.65
        }, 
        {
            "name": "AUS",
            "value": 1.22
        }

        // any more currencies
    ]

    // anything else you want to store
}

然后,您可以为您的货币创建一个类。

代码语言:javascript
复制
data class Currency( val name: String, val value: Float )

注意名称是如何相同的,并且使用Gson (Google的Json阅读器),它将为您绑定所有内容。

让我们创建另一个仅仅是文件结构的类,以使它更容易。

代码语言:javascript
复制
data class CurrencyFile( currencies: List<Currency> )

现在打开并读取该文件。

代码语言:javascript
复制
fun getCurrencyFile(context: Context) : CurrencyFile {
        val stream = context.assets.open("my_file.json")

        val size = stream.available()
        val buffer = ByteArray(size)

        stream.read(buffer)
        stream.close()

        return fromJson(String(buffer), CurrencyFile::class.java)
}
票数 2
EN

Stack Overflow用户

发布于 2018-07-29 04:41:04

您可以直接从应用程序访问资源:

代码语言:javascript
复制
 val currencies = "currency_list.txt" 
val currenciesString = application.assets.open(currencies).bufferedReader().use{ it.readText() }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51575024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档