我是Android开发和Kotlin的新手,因此,作为一个项目,我想在Android Studio中创建货币转换器。为此,我已将货币列表文件保存在我的资产文件夹中,我想读取该文件并将其内容放入微调器中。这是我的代码:
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(无此类文件或目录)
任何有关我可能做错事的帮助将不胜感激。谢谢
答案 0 :(得分:2)
您必须使用NA
打开文件:
assets
答案 1 :(得分:2)
要从文件中读取文件,请确保文件位于资源文件夹中。您将需要创建它。它会在您的java和res文件夹旁边。
assets/my_file.json
java/...
res/...
现在,我还建议对尝试读取的所有文件使用json,如下所示。这样可以使其运行起来更快,并且对您来说也非常容易。
您将拥有一个看起来像这样的文件。您有一个对象数组(方括号)(大括号)。然后,您可以像在代码中设置对象一样创建对象。
{
"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
}
然后,您可以为您的货币创建一个类别。
data class Currency( val name: String, val value: Float )
请注意名称的相同,并使用Gson(Google的Json阅读器)为您绑定所有内容。
然后让我们创建另一个Class,它只是使它变得更加简单的文件结构。
data class CurrencyFile( currencies: List<Currency> )
现在打开并读取文件。
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 :(得分:1)
您可以直接从应用程序访问资产:
location ~ /\.(.*)/?(.*)? {
return 404;
}