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())
}