当前位置:嗨网首页>书籍在线阅读

11-网络IO操作

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

13.3 网络I/O操作

Kotlin为java.net.URL增加了两个扩展方法:readBytes和readText。使用这两个方法配合正则表达式可以很方便地实现网络爬虫的功能。例如,下面是根据URL地址获取该URL的响应HTML函数。

fun getUrlContent(url: String): String {
     return URL(url).readText(Charset.defaultCharset())
}

如果需要根据URL获取其响应的比特数组,则可以使用下面的函数。

fun getUrlBytes(url: String): ByteArray {
     return URL(url).readBytes()
}

如果需要把URL响应字节数组写入文件,则可以使用下面的函数。

fun writeUrlBytesTo(filename: String, url: String) {
     val bytes = URL(url).readBytes()
     File(filename).writeBytes(bytes)
}

下面是根据URL来获取一张网络图片的字节流,然后调用readBytes方法将字节流写入文件的示例。

fun main(args: Array<String>) {
    val bing = URL("http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1 ")
    val texts = bing.readText()
    val regex = Regex("""<url>(.*)</url>""")
    val result = regex.find(texts)
    val imageUrl = "http://www.bing.com" + result!!.groupValues[1]
    val filename = imageUrl.substring(imageUrl.lastIndexOf('/'))
    //写入文件
    val output = File( "/Users/xiangzhihong/Kotlin/workspace/Hello/out", filename)
    val requestUrl = URL(imageUrl)
    output.writeBytes(requestUrl.readBytes())
}