`

FileLock和NonWritableChannelException

    博客分类:
  • Java
 
阅读更多

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.nio.channels.FileLock;

 

public class FileReaderLock {

public static void main(String[] args) throws Exception {  

FileInputStream fos = new FileInputStream("file.txt");  

        //获取文件锁 FileLock 对象  

        FileLock fl = fos.getChannel().tryLock();  

 

        //下面两个都会报错

        FileOutputStream fos1 = new FileOutputStream("file.txt");  

//        fos1.write(1);

        FileInputStream fis = new FileInputStream("file.txt");

//        fis.read();

      //tryLock是尝试获取锁,有可能为空,所以要判断 

        if (fl != null) {  

            System.out.println("Locked File");  

            Thread.sleep(100);  

            fl.release();//释放锁  

            System.out.println("Released Lock");  

        }  

        fos.close();  

    }  

}



FileLock不能对只读Channel上锁。
将 FileInputStream fis = new FileInputStream(file);改为RandomAccessFile raf = new RandomAccessFile(file, "rw");
从RandomAccessFile获得通道就可以了。

但是RandomAccessFile速度比BufferedReader要慢非常多,测试的时候是100倍的速度差距

 

分享到:
评论

相关推荐

    Python库 | filelock-3.0.3.tar.gz

    在使用`filelock`时,需要注意的是,正确地管理和释放锁至关重要,以避免死锁和其他并发问题。通常,推荐在`with`语句中使用`FileLock`,因为它能自动处理锁的释放,即使在发生异常时也能确保释放。 例如,以下代码...

    使用FileLock实现进程的互斥.rar

    下面我们将详细讲解`FileLock`的使用方法和注意事项: 1. **获取FileChannel**:首先,你需要创建一个`FileChannel`对象,这通常通过`FileInputStream`或`FileOutputStream`的`getChannel()`方法实现。例如: ```...

    08-filelock.rar

    在这个场景中,"08-filelock.rar"是一个压缩包,包含了与Linux和UNIX系统编程相关的源码副本,很可能是关于文件锁实现的示例代码或库。 在Linux和UNIX系统中,文件锁主要分为两种类型:记录锁(Record Locks)和...

    filelock强大的文件删除工具

    强大的文件删除工具,当你删除文件时,可能遇到文件无法删除,这时候,filelock就可以轻松帮助你解决文件。

    Python库 | types_filelock-0.1.3-py2.py3-none-any.whl

    6. **超时和重试机制**:在尝试获取锁时,`filelock`库提供了超时和重试选项。如果锁被其他进程持有,程序可以选择等待一段时间后重新尝试,或者立即返回失败。 7. **进程间通信(IPC)**:在多进程应用中,`...

    FileLock进程互斥

    总结起来,`FileLock`是Java中用于进程间互斥访问文件的重要工具,通过它可以有效地管理和保护共享资源,确保并发环境下的数据一致性。在实际应用中,需要根据具体需求选择合适的锁获取方式,并确保在完成操作后正确...

    filelock绿色文件加密软件

    我昨天刚开始用的加密软件,可以一次加密多个文件。如果想加密文件夹的话可以先将其打包。用过后感觉不错的。软件不需安装,但需要点击“绿化”。安装时请查看解压目录上的说明。加密器的初始密码是123456,绿化后请...

    CnCrypt文件保护工具1.1版CnCrypt FileLock.rar

    CnCrypt FileLock添加文件或目录后,创建自定义保护规则。能够提供隐藏、锁定、隐藏并锁定三种保护模式,可添加例外进程。保护你的文件、文件夹不被别人轻易打开、阅读、修改、删除、移动、复制,甚至你可以设置让...

    PyPI 官网下载 | types_filelock-0.1.3-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:types_filelock-0.1.3-py2.py3-none-any.whl

    filelock‑3.0.12‑py2‑none‑any.whl

    离线安装包,亲测可用

    java文件锁的实现

    9. **最佳实践**:在实际应用中,考虑使用`try-with-resources`语句来自动关闭`FileChannel`和`FileLock`,以防止资源泄漏。 10. **并发策略**:在多线程环境中,正确管理和同步对文件锁的访问至关重要。设计良好的...

    filelock:R中的跨平台文件锁定

    install.packages( " filelock " ) 用法 library( filelock ) 这是R进程1,它获得了排它锁。 如果要锁定文件myfile ,请始终创建一个单独的锁定文件,而不是将锁定直接放在此文件上! R1 > lck <- lock( " /...

    filelock-3.15.4-py3-none-any.whl

    filelock-3.15.4-py3-none-any

    文件加密 源码 file lock

    - `FileLock`类:主要的加密/解密逻辑,可能包含`encrypt()`和`decrypt()`方法。 - `KeyManager`类:负责密钥的生成、存储和检索。 - `UI`模块:用户界面相关的代码,包括文件选择对话框和输入密码的界面。 - `...

    filelock-3.16.1-py3-none-any.whl

    # 官方离线 whl 包 # 离线安装 whl 指令,/data/pkg/whls 为本地 whl 文件路径 pip install --no-index --find-links=/data/pkg/whls *.whl

    给文件加锁

    本篇将深入探讨文件锁的概念、工作原理以及如何在C语言中实现,参考提供的`filelock.c`和`filelock.h`文件。 文件锁分为两种类型:共享锁(读锁)和独占锁(写锁)。共享锁允许多个进程同时读取文件,但不允许写入...

    FileLockUtils.java

    文件锁源码,简单的上锁,解锁,其中多处是项目中特有的文件,可以删除自定义,有多个重载方法可以选择。主要形式都是一样的,就是创建文件,删除文件的工具类。

    PyPI 官网下载 | python-locker-1.0.2.tar.gz

    在Python编程中,当多个线程或进程需要访问同一资源时,为了保证数据的一致性和避免竞态条件,通常会使用锁机制。`python-locker`是一个在Python中实现锁功能的库,版本1.0.2提供了稳定且灵活的锁操作。本文将深入...

    Python库 | flufl.lock-2.1.1.tar.gz

    flufl.lock库由Flufl项目开发,它提供了两个主要的类:`FileLock`和`Semaphore`。`FileLock`是基于文件系统的锁,可以在跨进程的情况下工作,因为多个进程可以共享同一文件系统。它通过创建和删除特定的文件来实现锁...

    GiliSoft File Lock Pro 11.1.0 官方注册版

    它可以将您私密的文件、文件夹和磁盘驱动器信息,提供隐藏、禁止读取、防写保护、监控、安全删除及自我保护等等功能,保护您私密的文件、文件夹和磁盘驱动器信息,不会被其他人看见、阅读及修改,并能监控文件修改...

Global site tag (gtag.js) - Google Analytics