前言

Java中,获取文件锁的API需要访问文件的FileChannel。
lock()可以获得锁,release()可以释放锁。
详见API文档

样例

样例基于Java的IO和NIO编写,有互斥锁和共享锁两种,分别对这个RandomAccessFile对象生成的FileChannel对象加锁/释放锁。
为保证锁的释放,需要finally块中进行处理。
前面有建立ByteBuffer,后面则是将ByteBuffer对象转成CharBuffer对象从而在控制台打印出来~~

详细说明见代码,大多数注释都是用嘤文加的~~

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;public class LockingFileExample {//排它/互斥public static final boolean EXCLUSIVE = false;//共享public static final boolean SHARED = true;//文件路径private static final String FILE_PATH = "src/.../file.txt";public static void main(String[] args) throws IOException {//共享锁FileLock sharedLock = null;//排它锁/互斥锁FileLock exclusiveLock = null;try {RandomAccessFile raf = new RandomAccessFile(FILE_PATH, "rw");//get the channel from the fileFileChannel ch = raf.getChannel();ByteBuffer buffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, raf.length());//this locks the first half of the file - exclusiveexclusiveLock = ch.lock(0, raf.length()/2, EXCLUSIVE);/* Now modify the data . . . */ch.position(raf.length());ch.write(buffer);//release the lockexclusiveLock.release();//this locks the second half of the file - sharedsharedLock = ch.lock(raf.length()/2+1, raf.length(), SHARED);/* Now read the data . . . */ByteBuffer buffer2 = ch.map(FileChannel.MapMode.READ_WRITE, 0, raf.length());ch.read(buffer2);//release the locksharedLock.release();buffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, raf.length());//create the UTF-8 decoderCharset charset = Charset.forName("UTF-8");CharsetDecoder charsetDecoder = charset.newDecoder();//ByteBuffer -> CharBufferCharBuffer charBuffer = charsetDecoder.decode(buffer);//outputSystem.out.println(charBuffer);} catch (IOException ioe) {ioe.printStackTrace();} finally {if (exclusiveLock != null) {exclusiveLock.release();}if (sharedLock != null) {sharedLock.release();}}}
}

文件内容

霉霉的《Red》,很喜欢的一首歌~~

Loving him is like driving a new Maserati down a dead end street
Faster than the wind, passionate as sin, ending so suddenly
Loving him is like trying to change your mind once you’re already flying through the free fall
Like the colors in autumn, so bright, just before they lose it all
Losing him was blue, like I’ve never known
Missing him was dark grey, all alone
Forgetting him was like trying to know somebody you never met
But loving him was red
Loving him was red
Touching him was like realizing all you ever wanted was right there in front of you
Memorizing him was as easy as knowing all the words to your old favorite song
Fighting with him was like trying to solve a crossword and realizing there’s no right answer
Regretting him was like wishing you’d never found out that love could be that strong
Losing him was blue, like I’ve never known
Missing him was dark grey, all alone
Forgetting him was like trying to know somebody you never met
But loving him was red
Oh, red burning red
Remembering him comes in flashbacks, in echoes
Tell myself it’s time now, gotta let go
But moving on from him is impossible when I still see it all in my head
Burning red
Loving him was red
Losing him was blue, like I’ve never known
Missing him was dark grey, all alone
Forgetting him was like trying to know somebody you never met
‘Cause loving him was red
Yeah, yeah red
burning red
And that’s why he’s spinning round in my head
Comes back to me, burning red
Yeah, yeah
His love was like driving a new Maserati down a dead end street

运行效果

【原文件】

【Console】

打印文件内容:

【文件】

【Java】文件锁定与系列NIO操作相关推荐

  1. java 解锁关闭文件占用_程序员:Java文件锁定、解锁和其它NIO操作

    文件锁 java中i/o的文件锁定有两种:一种是独占锁,一种是共享锁. 共享锁既是共享读操作,但是只有一个可以进行写操作,共享锁防止其他正在运行的程序获取重复的独占锁,但是允许其他程序可以获取共享锁. ...

  2. java 文件去除扩展名_Java操作——获取文件扩展名,去掉文件扩展名

    昨天收邮件,得知要参加一个产品部的会议,猜想,也许是因为我做的这个产品demo问题.于是昨天忙活到凌晨3点半,结果早上一来才知道又被调戏了.发邮件的MM把邮件误发给我了.悲催啊有木有,困啊有木有!自己 ...

  3. java文件锁定_如何使用java锁定文件(如果可能的话)

    不要使用java.io包,而是使用java.nio包裹.后者有一个FileLock班级,等级.可以将锁应用于FileChannel.try { // Get a file channel for th ...

  4. 包含内部类的.java文件编译后生成几个.class文件

    如果一个类有内部类,编译将生成几个字节码文件,规则是怎样呢? 写在前,自己动手丰衣足食,结论只有个人实验支持,没有官方数据支持,欢迎自行查阅文档然后来指正,轻喷,谢谢. 1.普通类包含内部类的样例 p ...

  5. Java文件读写操作(c站最全!一篇就够了)

    写在前面   你们好,我是小庄.很高兴能和你们一起学习Java.如果您对Java感兴趣的话可关注我的动态.   写博文是一种习惯,在这过程中能够梳理和巩固知识. Java文件读写操作 一.File类 ...

  6. nio java 内核拷贝_大文件拷贝,试试NIO的内存映射

    最近项目里有个需求需要实现文件拷贝,在java中文件拷贝流的读写,很容易就想到IO中的InputStream和OutputStream之类的,但是上网查了一下文件拷贝也是有很多种方法的,除了IO,还有 ...

  7. 【Java文件操作(八)】将控制台输出重定向到txt文件

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  8. 【Java文件操作(七)】序列化:将自定义类写入文件

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  9. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

最新文章

  1. 最强大,最简洁的【禁止输入中文】
  2. 葡萄城报表介绍:交叉报表
  3. SqlParameter参数化查询
  4. [php-src]扩展中封装业务与 call_user_function 的使用建议
  5. 每周分享第 19 期(20190426)
  6. birt报表表格边框_选开源报表开发还是商用?2020报表软件产品整理
  7. JDK8新特性-Lambda表达式查找
  8. 出现红字是电脑问题吗_婚姻出现问题,生个孩子就能解决,这是真的吗?
  9. python如何批量下载大文件(支持断点续传)
  10. 小米手机第三方卡刷软件_小米手机MIUI卡刷图文教程
  11. idea 一直不停的updating index
  12. nodejs android ios,NodeJs 搭建WebSocket Push Server Web Android iOS Client
  13. 记一次 黑软件 kthreaddi 攻防战
  14. codeforces1149B. Three Religions
  15. PHP微信动态二维码活码管理系统源码免授权 独立版 带充值支付
  16. python的猴子补丁(Monkey Patching)
  17. Windows-电脑蓝屏问题
  18. 通过百度地图模糊查询获取详细地址?正则匹配
  19. zookeeper:[WorkerSender[myid=2]:QuorumCnxManager@584] - Cannot open channel to 3 at election address
  20. 营改增后计算机 维护费税率,“营改增”后各行业税率及征收率一览-中华会计网校...

热门文章

  1. __getattr__动态获取接口
  2. 两点之间最短路径:弗洛伊德算法
  3. 窗口尺寸,文档高,元素宽高的获取方式
  4. WinForm中使用AnyCAD三维控件 の 初始化
  5. openerp child_of操作符深度解析
  6. 校验输入的两次密码是否一致的问题
  7. 卸载docker后部署k8s后docker无法启动问题
  8. linux系统终端more,一篇文章让你学透Linux系统中的more命令
  9. mysql查询当前库的实例名_oracle查询数据库名、实例名等
  10. kettle连接mysql教程_kettle 连接 mysql8