Java文件锁

来源:互联网 发布:linux 当前路径命令 编辑:程序博客网 时间:2024/04/29 01:37

直接上代码,方便日后查看

FileChannel channel = null;      FileLock lock = null;  try{System.out.println("正在处理"+handleFile.getName());RandomAccessFile raf = new RandomAccessFile(handleFile, "rws");channel = raf.getChannel();  //锁住文件,独占此文件,如果已经被锁,则抛出异常lock = channel.tryLock(); if(lock != null){ MappedByteBuffer mbb= channel.map(FileChannel.MapMode.READ_WRITE, 0, (int)raf.length());         byte[] buf = new byte[(int) raf.length()];         for(int i=0;i<raf.length();i++){              buf[i]= mbb.get(i);         }         //根据buf转成string,.....         //其他操作...         //操作完删除文件 file.delete()不行,只能写在finally里,但是windows下不行,linux下可以                                 //这里还不知道怎么在锁里删除handleFile文件,目前没找到办法,只能放到锁外删除了,这样就删除操作没办法在一个锁事务了                                }}catch(OverlappingFileLockException lockException){logger.info("线程读取的文件已经被占用!");}catch(Exception e){e.printStackTrace();}finally{if(lock != null) {                  try {                      lock.release();                      lock = null;                  } catch (IOException e) {                      e.printStackTrace();                  }              }              if(channel != null) {                  try {                      channel.close();                      channel = null;                  } catch (IOException e) {                      e.printStackTrace();                  }              }              if(handleFile.delete()){//windows下不行,linux下可以            }else{            System.out.println(handleFile.getName()+"删除失败!");            }}


0 0
原创粉丝点击