Kotlin之IO操作实践

作者: i校长 | 来源:发表于2017-10-27 11:38 被阅读324次

    简介

            在kotlin中对IO的操作有别于java,完全用java的IO方式写kotlin代码是不可取得,下面是项目中实践出来的。

    InputStream

    使用InputStream方式如下:

    val inputStream:InputStream = File("kotlin.txt").inputStream()

    val inputString=inputStream.bufferedReader().use{ it.readText() }

    步骤:
            首先通过File对象获取InputStream实例,通过inputStream获取bufferedReader,最后通过bufferedReader.use高级函数读取文件内容,并返回String

    如果需要逐行读取,则需要以下方式:

    val inputStream:InputStream=File("kotlin.txt").inputStream()

    val lineList=mutableListOf()

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

    步骤:
              逐行读取只需要调用bufferedReader.useLines函数即可,lines就是每一行数据的集合

    BufferedReader

    使用BufferedReader的方式如下:

    val bufferedReader:BufferedReader=File("kotlin.txt").bufferedReader()

    val inputString=bufferedReader.use{it.readText()}

    描述:
              相信你看到了,File对象可以直接获取bufferedReader,先获取inputStream显得多余,如果你目标是bufferedReader建议这么写

    但这些还不是终点,因为File还可以直接useLines,请看

    File("kotlin.txt").useLines{ lines -> lines.forEach{ lineList.add(it) } }

    就是这么简单好用,赞 ,说完读,下面说写

    PrintWriter

    使用PrintWriter方式:

    File("kotlin.txt").printWriter().use{ out-> out.println( "writer something" ) }

    步骤:
              通过File对象获取printWriter,然后直接调用use高级函数,最后println函数写入字符串

    BufferedWriter

    使用BufferedWriter方式:

    File("kotlin.txt").bufferedWriter().use{ out-> out.write( "writer something" ) }

    步骤:
              不用多说了,你已经会用了吧。

    但是,这又不是终点,还有更简便的写法,这都依赖于kotlin的高级语法糖:扩展函数,下面请看:

    val file = File("kotlin.txt")

    file.writeText("something")

    file.appendText("\nAny.")

    file.appendText("\nOther.")

    请注意: 你肯定会问,为啥不一步到位,封装那些多余的printWriter,和bufferedWriter干嘛,下面告诉你:

    1. printWriter 在接收参数为null的情况下,会直接写入null

    2. bufferedWriter 在接收参数为null的情况 会抛出空指针

    3. file.writeText 函数只接收String 非Null 参数,如果你传入null 代码都编译不了

    总结

            相信你会用了,会用还不是目地,还是要看看源码,根本就是扩展函数的应用。希望这些对你有用,谢谢。

    相关文章

      网友评论

        本文标题:Kotlin之IO操作实践

        本文链接:https://www.haomeiwen.com/subject/vdjrpxtx.html