Groovy笔记(四)之IO

文章目录

文件IO操作

  1. 读取文件

        /**
         * 如果出于某种原因eachLine抛出异常,该方法能够确保资源正确地关闭,
         * 这适用于所有Groovy添加的I/O资源方法
         */
        new File(".", 'test.txt').eachLine { line ->
            println line
        }
        
        new File(".", 'test.txt').eachLine { line, nb ->
            println "Line $nb: $line"
        }
        
        def list = new File(".", 'test.txt').collect {it}
        println list
        
        def array = new File(".", 'test.txt') as String[]
        println array
        
        //获取文件的所有字节到字节数组
        byte[] contents = new File(".", 'test.txt').bytes
        println contents
        
        
        
        def is = new File(".", 'test.txt').newInputStream()
        // do something ...
        is.close() //需要手动关闭流
        
        
        
        new File(".", 'test.txt').withInputStream { stream ->
            // do something ...
        }
    
    
  2. 写入文件

        //自动创建文件并写入
        new File(".", 'test_writer.txt').withWriter('utf-8') { writer ->
            writer.writeLine 'dddd'
            writer.writeLine 'eeee'
            writer.writeLine 'ffff'
        }
        
        //等价以上的方式
        new File(".", 'test_writer.txt') << '''dddd
        eeee
        ffff'''
        
        
        
        def os = new File(".", 'test_writer.txt').newOutputStream()
        // do something ...
        os.close() //需要手动关闭
        
        
        new File(".", 'test_writer.txt').withOutputStream { stream ->
            // do something ...
        }
        
    
  3. 遍历目录

        import groovy.io.FileType
        import groovy.io.FileVisitResult
        
        //在目录的每一个文件直行闭包代码
        new File(".").eachFile { file ->
            println file.name
        }
        
        println("==============")
        
        //查找.groovy后缀的文件
        new File(".").eachFileMatch(~/.*\.groovy/) { file ->
            println file.name
        }
        
        println("==============")
        
        //在指定目录递归查找,并在每一个文件和目录直行闭包代码
        new File(".").eachFileRecurse { file ->
            println file.name
        }
        
        println("==============")
        //在指定目录递归查找,并在每一个文件直行闭包代码
        new File(".").eachFileRecurse(FileType.FILES) { file ->
            println file.name
        }
        println("==============")
        
        //更复杂的遍历,需要设置一个特殊的标志指示这个遍历要做什么。
        new File(".").traverse { file ->
            if (file.directory && file.name=='bin') {
                //如果当前file是一个目录或者它的名字是 bin ,则停止遍历
                FileVisitResult.TERMINATE
            } else {
                //打印文件名并继续遍历
                println file.name
                FileVisitResult.CONTINUE
            }
        
        }
    
  4. 调用外部进程

        //在外部process执行`ls`命令,execute()方法返回一个java.lang.Process对象
        def process = "ls -l".execute()
        //读取文本并打印
        println "${process.text}"
        
        println "=========================="
        
        def process2 = "ls -l".execute()
        //遍历命令进程的输入流
        process2.in.eachLine { line ->
            //打印每一行输入流
            println line
        }
    
  5. 对象序列化

        package com.jannal.io
        
        //在外部process执行`ls`命令,execute()方法返回一个java.lang.Process对象
        def process = "ls -l".execute()
        //读取文本并打印
        println "${process.text}"
        
        println "=========================="
        
        def process2 = "ls -l".execute()
        //遍历命令进程的输入流
        process2.in.eachLine { line ->
            //打印每一行输入流
            println line
        }
    
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值