如何将这段Java代码转换为Kotlin for Android Studio以检索文件数据?

如何将这段Java代码转换为Kotlin for Android Studio以检索文件数据?,android,kotlin,Android,Kotlin,我在Kotlin中搜索了如何检索文件,并在Java中找到了这段代码 公共空隙荷载(视图v){ FileInputStream fis=null; 试一试{ fis=openFileInput(文件名); InputStreamReader isr=新的InputStreamReader(fis); BufferedReader br=新的BufferedReader(isr); StringBuilder sb=新的StringBuilder(); 字符串文本; 而((text=br.readL

我在Kotlin中搜索了如何检索文件,并在Java中找到了这段代码

公共空隙荷载(视图v){
FileInputStream fis=null;
试一试{
fis=openFileInput(文件名);
InputStreamReader isr=新的InputStreamReader(fis);
BufferedReader br=新的BufferedReader(isr);
StringBuilder sb=新的StringBuilder();
字符串文本;
而((text=br.readLine())!=null){
sb.append(text.append(“\n”);
}
mEditText.SETEXT(某人的字符串());
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
如果(fis!=null){
试一试{
fis.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
如何用Kotlin语言写这个。。。? 到目前为止,我自己已经尝试在Kotlin中转换它,但在某些行上仍然存在一些错误(由表示)。请帮我解决这些错误

var fis = File(FILE_NAME).inputStream     //<ror>Unresolved reference File 
try {
    fis = openFileInput(FILE_NAME)
    var isr = InputStreamReader(fis)
    val br = BufferedReader(isr)
    val sb = StringBuilder()
    var text:List<String> = br.readLines()

    while ((text) != null) {                //<ror>
        sb.append(text).append("\n")
    }

    mEditText?.text(sb.toString())          //<ror>

} catch (e : FileNotFoundException) {
    e.printStackTrace()
} catch (e : IOException) {
    e.printStackTrace()
} finally {
    if (fis != null) {
        try {
            fis.close()
        } catch (e : IOException) {
            e.printStackTrace()
        }
    }
}
var-fis=File(文件名)。inputStream//未解析的引用文件
试一试{
fis=openFileInput(文件名)
var isr=输入流读卡器(fis)
val br=缓冲读取器(isr)
val sb=StringBuilder()
变量文本:List=br.readLines()
while((文本)!=null){//
sb.append(文本)。append(“\n”)
}
mEditText?text(sb.toString())//
}捕获(e:FileNotFoundException){
e、 printStackTrace()
}捕获(e:IOException){
e、 printStackTrace()
}最后{
如果(fis!=null){
试一试{
财政司司长(财政司司长)
}捕获(e:IOException){
e、 printStackTrace()
}
}
}

只需将java代码粘贴到Android Studio.kt文件中,它将建议您将其转换为Kotlin。在这里你可以得到99%的kotlin代码。然后更改一些缺少的元素。

我的解决方案是:

var fis = File(FILE_NAME).inputStream()                             

    try {
        fis = openFileInput(FILE_NAME)
        val isr = InputStreamReader(fis)
        val br = BufferedReader(isr)
        val sb = StringBuilder()
        var lines = br.readLines()

        for (line in lines) {                                       
            sb.append(line).append("\n")
        }

        mEditText?.setText(sb.toString())                           

    } catch (e : FileNotFoundException) {
        e.printStackTrace()
    } catch (e : IOException) {
        e.printStackTrace()
    } finally {
        try {
            fis.close()
        } catch (e : IOException) {
            e.printStackTrace()
        }

    }
这里似乎有无限循环,因此我将其更改为for each loop,以读取InputStream中的所有行

fun load(v: View?) {
    var fis: FileInputStream? = null

    try {
        fis = openFileInput(FILE_NAME)
        val isr = InputStreamReader(fis)
        val br = BufferedReader(isr)
        val lines = br.readLines()
        val output = lines.joinToString("\n")

        mEditText.setText(output)
    } catch (e: FileNotFoundException) {
        e.printStackTrace()
    } catch (e: IOException) {
        e.printStackTrace()
    } finally {
        try {
            fis?.close()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }
}
这应该相当合理。请注意,
if((text=br.readLine()!=null){
不能像在Kotlin中那样直接编写,但是您可以用
替换它,而(true){break;


如果您使用的是
,则不需要手动
close()
。使用{

我知道…我已经这样做了,但它不起作用…这是我在这里发布的第一个问题~
File(FILE_NAME).readLines().fold(StringBuilder()){ builder, next ->
   builder.appendln(next)
}.also {
   mEditText.setText(it.toString())
}

File(FILE_NAME).readLines().fold(StringBuilder()){ builder, next ->
   builder.appendln(next)
}.also {
   mEditText.setText(it.toString())
}