Kotlin和Java中的IO操作

2023-11-15

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
}*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin和Java中的IO操作 的相关文章

随机推荐

  • vue3实现鼠标左键拖拽画矩形框框选功能

    vue3 elementuiPlus 实现鼠标左键拖拽画矩形框 框选列表功能 仿照桌面框选功能 效果如图 vue3鼠标框选 代码
  • Hibernate的核心配置

    Hibernate的设计思路 Hibernate是一种全自动化管理持久化对象的ORM框架 既提供了完全面向对象的封装完整的对象持久化接口 屏蔽db层的差异化 提升代码可移植性 也提供了操作HQL和SQL的半自动化DB访问接口 提供复杂查询的
  • JSVC的配置与使用详解

    JSVC是apache出的所谓common daemon的一个工具套件 他利用一个daemon程序 从而使tomcat这样的程序能在开机的时候自动启动 而且能使tomcat被 chkconfig这样的工具所管理 在之前的一篇文章中对jsvc
  • 算法岗面试问题总结(二)

    文章目录 1 SVM的loss是啥 2 kmeans聚类如何选择初始点 3 RF和GBDT谁更容易过拟合 偏差和方差 4 xgb的分类树也是用残差吗 不是的话是什么 5 讲讲数据倾斜怎么处理 6 请你说说SVM的优缺点 7 LR和SVM的联
  • C++中的typeInfo用法总结

    最近在做测试 在大型程序中 模板类型加上继承关系搞得我混乱 还好有tpyeinfo帮助捋顺关系 typeInfo与typeid简单总结说明 和sizeof这类的操作符一样 typeid是C 的关键字之一 typeid操作符的返回结果是名为t
  • jenkins学习笔记第十六篇 jenkins权限控制

    创建用户 对用户进行权限控制 在实际项目中 根据不同的用户 大致可分为 测试用户 开发用户 运维用户等 这时就需要给不同的用户赋予不能的权限 首选需要安装插件 Role based Authorization Strategy 这个插件主要
  • ctfshow-WEB-web14( 利用数据库读写功能读取网站敏感文件)

    ctf show WEB模块第14关是一个SQL注入漏洞 绕过switch循环后可以拿到一个登录界面 登录界面存在SQL注入 脱库以后会提示flag在另一个文件中 利用数据库的文件读写功能读取文件内容即可拿到flag 开局是一个switch
  • 智能优化算法之遗传算法(GA)的实现(基于二进制编码,Python附源码)

    文章目录 一 遗传算法的实现思路 二 基于二进制编码方式的遗传算法的实现 1 库的导入 2 目标函数 3 个体编码函数 4 个体解码函数 5 选择函数 6 交叉函数 7 变异函数 8 算法主流程 一 遗传算法的实现思路 遗传算法 Genet
  • Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

    比较的指标 1 cpu 2 流量 3 电量 4 内存占用 5 联网时间 功能点 1 重试机制 2 提供的扩展功能 3 易用性 4 是否https 5 是否支持reflect api OkHttp有配套方法 6 缓存 重试 7 cookie支
  • Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解

    前往老猿Python博文目录 一 引言 对于带Logo 如抖音Logo 电视台标 的视频 有三种方案进行Logo消除 直接将对应区域用对应图像替换 直接将对应区域模糊化 通过变换将要去除部分进行填充 其中 方法1又可以使用三种方法 一是使用
  • C++之vector深度剖析

    C 之vector深度剖析 1 vector的介绍及使用 1 1 vector的介绍 1 2 vector的使用 1 2 1 vector的定义 1 2 2 vector iterator 的使用 1 2 3 vector 空间增长问题 1
  • python3-常用方法和函数总结(字符串)

    方法与函数的差别 调用方式 作用域 方法 对象 方法名 不释放空间 函数 函数名 自动释放空间 字符串常用函数与方法 函数 方法 说明 举例 capitalize 方法 将首字母变为大写 非首字母变为小写 str hEllo print s
  • UE4 DDC共享

    本人用的是源码引擎编译的 内网使用DDC 先创建一个共享文件夹 这个文件夹来保存共享资源 修改引擎的baseengine ini cpp DerivedDataBackendGraph Shared Type FileSystem Read
  • 栈内存与堆内存的区别

    栈内存和堆内存都是计算机中用于存储数据的内存区域 它们之间的主要区别在于 存储方式 栈内存采用 先进后出 的存储方式 而堆内存采用随机存储的方式 空间大小 栈内存的空间大小通常比堆内存的空间大小要小得多 生命周期 栈内存的生命周期比堆内存的
  • 使用Kotlin做一个简单的HTML构造器

    最近在学习Kotlin 看到了Kotlin Koans上面有一个HTML构造器的例子很有趣 今天来为大家介绍一下 最后实现的效果类似Groovy 标记模板或者Gradle脚本 就像下面 这是一个Groovy标记模板 这样的 html lan
  • Linux 下查看进程运行时长

    因为有一个Java程序运行中会持续输出大量的日志文件 可能导致磁盘空间不足 为了规避这个风险 需要根据程序运行时长估算磁盘使用量 1 查看进程的PID ps ef grep java 2 指定进程查看运行时长 PID ps o etime
  • SpringBoot优化

    一 SpringBoot全局异常处理 任何项目发生异常是不可避免的 使用全局异常捕获发生的异常是十分必要的 SpringBoot框架对全局异常捕 获提供了很好的支持 并且操作非常简单 我们只需要创建一个类和一个方法 并添加两个注解 Cont
  • LSTM分类模型

    LSTM文本分类模型 本文主要固定一个文本分类的流程 分为三个部分 数据处理 对分类文本数据集做简单的预处理 模型数据准备 处理上一步的结果 得到模型的输入样本 模型搭建和训练流程 模型使用BiLSTM 训练过程可以使用cpu或者GPU t
  • shell中的for循环的用法(C语言式)

    C语言式的for循环 用法 exp1 exp2 exp3 是三个表达式 其中exp2是判断条件 for循环根据exp2的结果来决定是否继续下一次的循环 statements是循环体语句 可以有一条 也可以有多条 do和done是shell中
  • Kotlin和Java中的IO操作

    Kotlin的特性 1 Kotlin提供了非常多 File Stream Reader Writer的拓展方法 2 使用use拓展自动关闭资源 3 小文件一次性读写操作 一 首先来看看繁琐的JavaIO操作 来读取一个文件 package