zoukankan      html  css  js  c++  java
  • Groovy读取文件信息

    1. eachLine -- 打开和读取文件的每一行

    new File("foo.txt").eachLine {
        println it.toUpperCase();
    }

    2. readLines -- 其作用基本与 eachLine 相同,但它不接受闭包为参数,而是把文件行读到一个 List 中

    lineList = new File("foo.txt").readLines();
    lineList.each {
        println it.toUpperCase();
    }

    3. splitEachLine -- 读取文件的每一行,然后对行以指定分隔符分割成数组。不用再多说了,这个方法对处理 CSV 文件那可是相当的高效。

    lineList = new File("foo.csv").splitEachLine(",") {
        println "name=${it[0]} balance=${it[1]}";
    }

    4. eachByte -- 处理二进制文件,以字节级访问文件,这个方法相当于 eachLine() 方法。

    new File("foo.bin").eachByte { print it; }

    5. readBytes -- 自然,处理二进制文件,以字节级访问文件,这个方法相当于 readLines() 方法了

    byteList = new File("foo.bin").readBytes();
    byteList.each {
        println it;
    }

    6. write -- Groovy 用这个方法写文件真是太直观了

    new File("foo.txt").write("testing testing");
    
    new File("foo.txt").write("""
    This is
    just a test file
    to play with
    """);

    以上使用了三重引用语法,其中的文本保留格式的写入到文件中。注意上面写法在文件首尾都会有一个空行,除非起始和结束字符都要紧贴 """;还有上面方法写的文件用词本打开会是挤在一行,用 editplus 打开是多行,因为它采用的是 linux 下的 /n 换行,而不是 windows 下的 /r/n 换行。、

    7. append -- 与 write 覆写文件不同,append 是在文件后追加内容

    new File("foo.txt").append("""/
    This is  
    just a test file  
    to play withff
    """  
    );

    8. eachFile -- 功能上类似 java.io.File 的 listFiles() 方法。用来列举路径中的每个文件(包括目录),传给闭包处理

    new File(".").eachFile {   //这里的 File 表示的是一个路径
        println it.getName();  //eachFile() 列出的每一项是一个 File 实例
    }

    9. eachFileRecurse -- 以深度优先的方式递归遍历路径,列出文件(包括目录),传给闭包处理

    new File(".").eachFileRecurse {   //这里的 File 表示的是一个路径
        println it.getPath();  //eachFile() 列出的每一项是一个 File 实例
    }


    10. …… 再重复一下,其他 Groovy 对 java.io.File 的扩展方法请参考 http://groovy.codehaus.org/groovy-jdk/java/io/File.html。 如 eachDir()、eachDirMatch()、eachDirRecurse()、eachFileMatch()、filterLine()、 newInputStream()、newOutputStream()、newReader()、newPrintWriter()、 withInputStream()、withOutputStream()、withReader()、withPrintWriter() 等等。还要留意一下有一些方法是可以指定字符集的。

    ----

    操作目录

    列出目录所有文件(包含子文件夹,子文件夹内文件) :

    def dir = new File(dirName)  
    if (dir.isDirectory()) {  
        dir.eachFileRecurse { file ->  
            println file  
        }  
    } 
    
    dir.eachFileMatch(~/.*.txt/) {File it-> println it.name  } //使正则表达式匹配文件名  
    dir.eachFileMatch(FILES, ~/.*.txt/) { File it-> println it.name  }   
     

    写文件

    import java.io.File  
      
    def writeFile(fileName) {  
        def file = new File(fileName)  
          
        if (file.exists())   
            file.delete()  
              
        def printWriter = file.newPrintWriter() //   
          
        printWriter.write('The first content of file')  
        printWriter.write('
    ')  
        printWriter.write('The first content of file')  
          
        printWriter.flush()  
        printWriter.close()  
    }  

    除了 file.newPrintWriter() 可以得到一个 PrintWriter,类似方法还有 file.newInputStream()
    file.newObjectInputStream()等。

    更简洁写法:

    new File(fileName).withPrintWriter { printWriter ->  
         printWriter.println('The first content of file')  
    }  

    解析 xml 文件

    <?xml version="1.0" encoding="UTF-8"?> 
    <customers> 
      <corporate> 
        <customer name="bill gates" company="microsoft"></customer> 
        <customer name="steve jobs" company="apple"></customer> 
        <customer name="bill dyh" company="sun"></customer> 
      </corporate> 
      <consumer> 
        <customer name="jone Doe"></customer> 
        <customer name="jane Doe"></customer>    
      </consumer> 
    </customers>
    def customers = new XmlSlurper().parse(new File("customers.xml")) 
    /*对文件进行解析*/ 
    for(customer in customers.corporate.customer){ 
        println "${customer.@name} works for${customer.@company}"; 
    } 

    解析 propeties 文件

    参考 groovy: How to access to properties file?,代码如下:

    def props = new Properties()
    new File("message.properties").withInputStream { 
      stream -> props.load(stream) 
    }
    // accessing the property from Properties object using Groovy's map notation
    println "capacity.created=" + props["capacity.created"]
    
    def config = new ConfigSlurper().parse(props)
    // accessing the property from ConfigSlurper object using GPath expression
    println "capacity.created=" + config.capacity.created

    另外一种方式:

    def config = new ConfigSlurper().parse(new File("message.groovy").toURL())

    message.groovy 内容如下:

    capacity {
      created="x"
      modified="y"
    }
  • 相关阅读:
    PostgreSQL数据库中的常见错误
    postgresql相关命令
    Linux系统查看公网IP地址
    TCP/IP TIME_WAIT状态原理
    TCP连接状态详解及TIME_WAIT过多的解决方法
    让你提升命令行效率的 Bash 快捷键 [完整版]
    linux 如何显示一个文件的某几行(中间几行)
    linux中内核的一个不错的参数somaxconn
    Linux crontab 实现每秒执行
    Linux tar This does not look like a tar archive
  • 原文地址:https://www.cnblogs.com/alansheng/p/4788237.html
Copyright © 2011-2022 走看看