Groovy笔记(8)_File

File 类介绍

 

1、抽象路径名:File类提供抽象的,独立于系统的分级路径名试图。

     D:/clat/test.groovy(注意抽象路径名使用/,不是/ )

2、File可以表示文件或目录

3、Groovy对java.io.File进行了增强(参考GDK Doc)

     def toysFile = new File("src/TestToysFile.dat")

     if(!toysFile.exists()){

          toysFile.createNewFile()

          toysFile.append('Groovy and clat' + '/n')

     }

 

4、File类的其他常用方法

  • Boolean delete():删除文件或目录
  • void eachFile(Closure cl):目录中每个文件应用闭包
  • void eachFileResurse(Closure cl):同上并对子目录递归
  • void eachLine(Closure cl):逐行遍历文件并应用闭包
  • String getPath():将抽象路径名称转换为路径名字符串。
  • String getText():读文件返回字符串
  • Boolean isDirectory():是否目录
  • Boolean mkdir():创建目录
  • void withPrintWriter(Closure cl):获取打印速写器。//具体不明,可以查API

 

写多个对象到文件的方法

 

 

1、基础知识:将对象序列化到文件时,如果多个对象序列化到同一个文件,会覆盖头部信息,使得读取对象失败,所以要做处理。

2、

public class FileObjectOutputStream extends ObjectOutputStream{

      private File file;

      private boolean append;

      //构造函数

      public FileObjectOutputStream() throws IOException,Exception{}

      public FileObjectOutputStream(File file) throew IOException,Exception{this(file,false);}

      public FileObjectOutputStream(File file,boolean append) throws IOException, Exception{

          supre(new FileOutputStream(file,append));

          this.file = file;

          this.append = append;

      }

      //当文件中有对象时覆盖writeStreamHeader()方法,以便Reset流的头部信息

      protected void writeStreamHeader()throew IOException{

            System.out.println("/t/tReset Stream Header!")

            super.reset();

       }

}

3、Demo

def toysFile = new File("src/testToysFile.dat")

if(!toysFile.existe()){

    toysFile.createNewFile()

    toysFile.append('Groovy hello!')

}

def newToy = new Toy(toyName:'toy',unitPrice:'100')

def objOutput

if(toysFile.length() == 0 ){ // 如果文件时新的 则新建

    objOutput = new ObjectOutputStream(new FileOutputStream(toysFile, true))

}else{    //如果文件已经被写过需要特殊处理

    objOutput = new FileObjectOutputStream(toysFile, true)

}

objOutput.writeObject(new Toy1)

objOutput.flush();

objOutput.close()

 

 

 

读取文件

 

1、

def objInput

try{

    objInput = new ObjectInputStream(new FileInputStream(toysFile))

    def obj = objInput.readObject()

    while(obj){

        prinltn obj.toyName + ':' + obj.unitPrice

        obj = objInput.readObject()

    }

}catch(EOFException e){}

if(objInput !=null){

   objInput.close()

}

 

 

 

多删几次文件

 

1、基础知识:Java中删除文件不一定成功,所有策略是多删除几次。

2、

def forceDeleteFile(File file){

    Boolean result = false

    def delCount = 0

    while(!result && delCount ++ <10){

          System.gc()

          result = file.delete()

    }

    return result

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值