在实际的项目中我们经常会与遇到操作文件的情况,这是很常见的,但是我们在实际中用传统的I/O操作不能满足我们项目的需要并且对文件的写特别慢,操作比较麻烦。那么我们怎么样实现呢?最近在项目中我们遇到了高并发的事情,我是这样操作的。利用JavaNIO实现非阻塞式的读写,通过锁机制完成高并发下的文件的操作。

public void run() {File file = new File("/home/test.txt");RandomAccessFile fout = null;FileChannel fcout = null;try {fout = new RandomAccessFile(file, "rw");long filelength = fout.length();//获取文件的长度fout.seek(filelength);//将文件的读写指针定位到文件的末尾fcout = fout.getChannel();//打开文件通道FileLock flout = null;while (true) {try {flout = fcout.tryLock();//不断的请求锁,如果请求不到,等一秒再请求break;} catch (Exception e) {System.out.print("lock is exist ......");sleep(1000);}}String str = " hello word!!!!\n";//需要写入的内容fout.write(str.getBytes());//将需要写入的内容写入文件flout.release();fcout.close();fout.close();} catch (IOException e1) {e1.printStackTrace();System.out.print("file no find ...");} catch (InterruptedException e) {e.printStackTrace();} finally {if (fcout != null) {try {fcout.close();} catch (IOException e) {e.printStackTrace();fcout = null;}}if (fout != null) {try {fout.close();} catch (IOException e) {e.printStackTrace();fout = null;}}}}

上面的代码实现了在文件的末尾追加内容,要想在文件的中间插入内容,这个方法还不能实现,必须读出来,当读到添加内容的位置,添加到StringBuffer中,然后读完文件,将文件读写指针定位开始,再将StringBuffer中的内容写回去就可以了。这个思想是可以实现的。我就不重复的添加代码了。如果在实现上遇见问题,随时留言。一起学习。

Java高并发读写文件相关推荐

  1. java高并发多线程及多进程同时写入文件研究

    文章目录 测试&思考: java多线程同时写一个文件 第一种情况是:一个线程A有对文件加锁,另一个线程B没对文件加锁 在windows7环境下:(持有锁的可以写文件成功). 在linux ce ...

  2. JAVA高并发程序设计(葛一鸣著)读书笔记

    本文为JAVA高并发程序设计(葛一鸣著)读书笔记.这本书对于刚刚入门的童鞋来讲可能有点深,我推荐可以先看看Java多线程编程核心技术(高洪岩著)一书. 第一章 走入并行世界 什么是同步和异步? 同步就 ...

  3. 《实战Java高并发程序设计》github笔记和源码

    笔记 <实战Java高并发程序设计>中有很多代码范例,适合初学者通过实践入门并发编程,这本书有个问题就是前面的代码都用JDK7,第六章开始又用JDK8了 笔者做了相关笔记并整理源代码,欢迎 ...

  4. Java 高并发系列1-开篇

    Java 高并发系列1-开篇 我们都知道在Android开发中, 一个Android程序启动之后会有一个主线程,也就是UI线程, 而网络加载数据, 本地文件长时间读写,图片压缩,等等,很多耗时操作会阻 ...

  5. Java高并发,如何解决,什么方式解决

     对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一 ...

  6. 《重学Java高并发》你管这“破玩意儿”叫锁(没有高并发经验的朋友们看过来,该专栏结合笔者的实战来讲高并发)

    专栏特色:结合10余年的工作经验,在实践中提炼总结高并发经验,将理论落到实处,不仅助力面试,更是真正提高技能. 专栏目录: <重学Java高并发>Sempahore的使用场景与常见误区 & ...

  7. java高并发案例详细讲解

    对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...

  8. Java高并发秒杀API(三)之Web层

    Java高并发秒杀API(三)之Web层 1. 设计前的分析 Web层内容相关 前端交互设计 Restful规范 SpringMVC Bootstrap + jQuery 前端页面流程 详情页流程逻辑 ...

  9. 关于Java高并发的问题

    前言: 对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和 ...

最新文章

  1. 微信支付curl出错及错误码解决方案
  2. 西安python工资怎么样-干货|python人工智能工程师工资多少钱
  3. 美国大学生数学建模竞赛赛题特点
  4. NYOJ 920 Trees
  5. EtherCAT伺服驱动器-如何选择硬件开发方案
  6. sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器
  7. php 四级联动插件,JavaScript_jQuery实现的多选框多级联动插件,jQuery 实现的多选框联动插件 - phpStudy...
  8. Elastic Job 入门
  9. 汽车“缺芯”的挑战与机遇
  10. 可重入锁模拟三个线程之间的通信
  11. Linux7安装oracle11g报错 Error in invoking target ‘agent nmhs‘ of makefile “ins_emagent.mk”
  12. Python判断一个正整数是否为素数的算法
  13. 中继器、网桥、路由器和网关的功能及区别
  14. YOLO v3 详解
  15. 数据结构入门9—虚树
  16. 全能型终端神器——MobaXterm安装教程
  17. 427. 建立四叉树
  18. 【VSCode报错】 Error while fetching extensions : XHR failed
  19. 在线电子书创建:MkDocs + Github + ReadTheDocs
  20. SDD与SDT的区别

热门文章

  1. 高效的 itertools 模块
  2. Python itertools accumulate
  3. ifnull mysql date,MySQL的CAST和IFNULL函数的问题
  4. 各大电商平台API常用方法总结(必看篇)
  5. Java IO体系结构图
  6. 初学Python实训心得以及一个爬虫例子
  7. java编程中的异常分析及面向对象的思考总结[图]
  8. 小程序拒绝摄像头授权,重新允许无法调起摄像头
  9. 赛题分析:AI决策•强化学习落地挑战赛——学习指定平等的促销策略
  10. 【AI数学】Group Normalization(何恺明ECCV2018最佳论文提名)