Kotlin和Java中的IO操作
Kotlin的特性
1.Kotlin提供了非常多,File、Stream、Reader、Writer的拓展方法
2.使用use拓展自动关闭资源
3.小文件一次性读写操作
一、首先来看看繁琐的JavaIO操作,来读取一个文件
package cn.kotliner.java.io;
import java.io.*;
/**
* Created by wangdong
* Java中的IO操作
*/
public class IO {
public static void main(String... args) {
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(new File("build.gradle")));
String line;
while((line = bufferedReader.readLine()) != null){
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二、如果用Kotlin直接译一中的JavaIO代码
package cn.kotliner.kotlin.io
import java.io.*
/**
* Created by wangdong
* Kotlin直译Java中的IO操作
*/
fun main(args: Array<String>) {
val file = File("build.gradle")
val bufferedReader = BufferedReader(FileReader(file))
var line: String
while(true){
line = bufferedReader.readLine()?:break
println(line)
}
bufferedReader.close()
}
三、使用Kotlin中use方法去改写
package cn.kotliner.kotlin.io
import java.io.*
/**
* Created by wangdong
* 使用kotlin中的use的方法改写
*/
fun main(args: Array<String>) {
val file = File("build.gradle")
BufferedReader(FileReader(file)).use {
var line: String
while(true){
line = it.readLine()?:break
println(line)
}
}
}
/**
* 第十行use点进去,就可以看到use是怎么实现的
*/
/**
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}*/
四、使用kotlin中的readlin()方法改写一下
package cn.kotliner.kotlin.io
import java.io.*
/**
* Created by wangdong
* 使用readlines()方法改写
*/
fun main(args: Array<String>) {
File("build.gradle").readLines().forEach(::println)
}
/**
* Reads the file content as a list of lines.
*
* Do not use this function for huge files.
*
* @param charset character set to use. By default uses UTF-8 charset.
* @return list of file lines.
public fun File.readLines(charset: Charset = Charsets.UTF_8): List<String> {
val result = ArrayList<String>()
forEachLine(charset) { result.add(it); }
return result
}*/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Kotlin集合框架分析
一、Kotlin中集合框架和Java集合框架特别相似 掌握以下例子就Ok了 package cn.kotliner.kotlin.collections /** * Created by wangdong * 集合框架 * kotlin中集合的映射,最终都映射到Java中的list * kotlin中所有的list和map都是不可变的接口,如下不可以.add或者.remove * 但是kotlin的mutableList和mutablemap是可变的 * public interface MutableList<E> : List<E>, MutableCollection<E> { * Modification Operations *override fun add(element: E): Boolean *override fun remove(element: E): Boolean * Bulk Modification Operations *override fun addAll(elements: Collection<E&g...
-
下一篇
Scala关键字lazy的理解和使用
Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量。 在Java中,要实现延迟加载(懒加载),需要自己手动实现。一般的做法是这样的: public class LazyDemo { private String property; public String getProperty() { if (property == null) {//如果没有初始化过,那么进行初始化 property = initProperty(); } return property; } private String initProperty() { return "property"; } } 比如常用的单例模式懒汉式实现时就使用了上面类似的思路实现。 而在Scala中对延迟加载这一特性提供了语法级别的支持: lazy val property = initProperty() 使用lazy关键字修饰变量后,只有在使用该变量时,才会调用其实例化方法。也就是说在定义property=initProperty()时并不...
相关文章
文章评论
共有0条评论来说两句吧...