前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java高并发读写文件[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-08-30 20:40:09
1.6K0
发布2022-08-30 20:40:09
举报
文章被收录于专栏:全栈程序员必看

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

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

代码语言:javascript
复制
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.cn/144697.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档