美文网首页
使用RandomAccessFile实现控制文件大小,删去开始部

使用RandomAccessFile实现控制文件大小,删去开始部

作者: 阵阵忧伤驻心头 | 来源:发表于2019-04-15 10:22 被阅读0次

    之前有个需求要求我们写log 的时候输出的文件不要大于4M

    最开始我的方案比较粗暴,大于4M的时候把源文件删除,然后继续写入文件,这样某种意义上是实现的需求

    但是这样有个很严重的问题,会让之前的log丢失

    后来发现RandomAccessFile这个类可以做到文件的随机访问

    废话不多说直接上代码

    //size为需要限制的文件大小
    private void readAndRemoveFirstLines(File file,long size)throws IOException{
    
    RandomAccessFile raf =null;
    
      try{
    
    raf =new RandomAccessFile(file, "rw");
    
        //Initial write position
    
        //getFilePointer 此方法返回从文件开始的偏移量,以字节为单位,进行下一个读或写操作发生
    
        long writePosition = raf.getFilePointer();
    
        long readPosition=0;
    
        while (true) {
    
    String line = raf.readLine();
    
          if(line ==null){
    
    break;
    
          }
    
    // Shift the next lines upwards.
    
          readPosition = raf.getFilePointer();
    
          if (readPosition>=file.length()-size){
    
    break;
    
          }
    
    }
    
    byte[] buff =new byte[1024];
    
        int n;
    
        while (-1 != (n = raf.read(buff))) {
    
    raf.seek(writePosition);
    
          raf.write(buff, 0, n);
    
          readPosition += n;
    
          writePosition += n;
    
          raf.seek(readPosition);
    
        }
    
    raf.setLength(writePosition);
    //此处为写入头文件的代码,如不需要可以删去
        raf.seek(0);
    
        raf.writeUTF(baseInfo);
    
      }catch(IOException e){
    
    throw e;
    
      }finally{
    
    try{
    
    if(raf !=null){
    
    raf.close();
    
          }
    
    }catch(IOException e){
    
    throw e;
    
        }
    
    }
    
    }
    

    相关文章

      网友评论

          本文标题:使用RandomAccessFile实现控制文件大小,删去开始部

          本文链接:https://www.haomeiwen.com/subject/zmiywqtx.html