Java高并发读写文件[通俗易懂]

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

大家好,又见面了,我是你们的朋友全栈君。

在实际的项目中我们经常会与遇到操作文件的情况,这是很常见的,但是我们在实际中用传统的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中的内容写回去就可以了。这个思想是可以实现的。我就不重复的添加代码了。如果在实现上遇见问题,随时留言。一起学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144697.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【QGIS入门实战精品教程】2.1:初识QGIS软件[通俗易懂]

    【QGIS入门实战精品教程】2.1:初识QGIS软件[通俗易懂]从今天开始,我们一起来学习一款免费开源、对机器要求低、功能强大的GIS软件:QGIS!一、QGIS简介QGIS(原称QuantumGIS)是一个自由软件的桌面GIS软件。它提供数据的显示、编辑和分析功能。QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、MacOSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的免费开源版桌面地理信息系统。二、QGIS软件的主要特点支持多种GIS数据文件格式。通过GDAL..

    2022年6月16日
    41
  • 图像处理——分水岭算法

    图像处理——分水岭算法首先感谢以下两位的博文帮助我的理解:(1)迈克老狼2012  https://www.cnblogs.com/mikewolf2002/p/3304118.html(2)-牧野-       http://blog.csdn.net/dcrmg/article/details/52498440分水岭算法是一种图像区域分割法,在分割的过程中

    2022年5月16日
    62
  • C#使用NPOI 导出Excel

    C#使用NPOI 导出ExcelC#使用NPOI导出Excel首先需要添加NPOI的引用//创建Excel文件的对象HSSFWorkbookbook=newHSSFWorkbook();//添加一个sheetIRowrow2=sheet1.CreateRow(0);row2.CreateCell(0).SetCellValue(“序号”);row2.CreateCell(1).SetC

    2022年6月17日
    24
  • matlab矩阵存为txt_matlab数据批量处理

    matlab矩阵存为txt_matlab数据批量处理fileID=fopen(‘Data.txt’);A=textscan(fileID,’%f%*f%*f%*f%f%f%f’);fclose(fileID);Matrix=cell2mat(A);textscan中,%*f表示不读取该列数据。

    2025年9月18日
    2
  • 基尼系数简单算法举例说明_趣学python算法100例

    基尼系数简单算法举例说明_趣学python算法100例1912年意大利经济学家基尼,设计了一个测度社会贫富差距的方法沿用至今,成为国际通用的标准。文章中通过python,公式法以及面积法计算2008年美国收入情况的基尼系数。并补充列表推导式相关介绍使用。

    2022年10月13日
    4
  • Ansi,UTF8,Unicode,ASCII编码的差别

    Ansi,UTF8,Unicode,ASCII编码的差别

    2021年12月7日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号