有时候,我们需要以独占的方式访问某个文件,因此,需要在打开文件时,对文件上锁,以防其他人或进程也访问该文件。Java本身提供了俩种锁文件的方式:
方式一:用RandomAccessFile类操作文件
RandomAccessFile的open方法,提供了参数,实现以独占的方式打开文件:
new RandomAccessFile(file, "rws")
其中的“rws”参数中,rw代表读写方式,s代表同步方式,也就是锁。这种方式打开的文件,就是独占方式。
方式二:用文件通道(FileChannel)的锁功能
如:
RandomAccessFile raf = new RandomAccessFile(new File("c:\\test.txt"), "rw");
FileChannel fc = raf.getChannel();
FileLock fl = fc.tryLock();
if (fl.isValid()) {
System.out.println("get the lock!");
但这俩种方式,都只能通过RandomAccessFile访问文件,如果只能通过InputStream来访问文件,如用DOM分析XML文件,怎么办呢?
其实,FileInputStream对象,也提供了getChannel方法,只是缺省的getChannel方法,不能锁住文件,所以,如果需要,就必须自己重写一个getChannel方法,如:
public FileChannel getChannel(FileInputStream fileIn, FileDescriptor fd) {
FileChannel channel = null;
synchronized (fileIn) {
channel = FileChannelImpl.open(fd, true, true, fileIn);
return channel;
}
}
原文转载地址:http://blog.sina.com.cn/s/blog_46e73e77010001cj.html
分享到:
相关推荐
:Java新IO】_文件锁笔记032003
java 文件锁的简单实现 文件锁是指对文件的访问和修改进行控制和限制,以确保文件的安全性和一致性。在 Java 中,可以使用 FileLock 类来实现文件锁。下面将详细介绍 Java 文件锁的简单实现。 什么是文件锁 文件...
在Java编程语言中,文件锁是一种用于控制对文件进行并发访问的重要机制。它允许一个或多个进程在同一时间对文件的特定部分进行独占访问,从而防止数据的不一致性。本篇将深入探讨Java中文件锁的实现,以及如何在实际...
只锁一个文件,excel word 自带密码不好用,就试一下这个吧单个文锁,目前我也没找到破解的方法,如果忘记密码的了呵呵呵,上帝保佑,如你知也通知我一下吧 ths
在给定的压缩包文件中,我们关注的是"FastCopyFile.java"、"UseFloatBuffer.java"以及NIO中的文件锁功能。 首先,让我们详细了解一下`FastCopyFile.java`。这个文件很可能是一个示例程序,演示了如何使用Java NIO...
7. **同步写入**:如果多线程环境需要同时写入文件,可以考虑使用FileChannel的锁机制,以防止数据交错。 8. **字符编码**:默认情况下,FileWriter使用平台默认编码。如果需要指定特定编码,可以使用`new ...
当然,实际应用中可能需要考虑更多因素,如错误处理、文件锁、并发访问等。在大型项目中,你可能会选择使用Apache Commons IO库或Java 8的Stream API来简化文件操作。 总的来说,“简单java文件过滤”涉及了Java中...
Java 多线程之并发锁 Java 中的多线程编程是指在一个程序中同时运行多个线程,以提高程序的执行效率和响应速度。在多线程编程中,线程间的同步是非常重要的,因为不同的线程可能会同时访问同一个共享资源,导致数据...
本文将深入探讨如何使用Redisson和Curator框架来实现Java环境中的分布式锁。 首先,让我们来看一下Redisson实现的分布式锁。Redis是一个高性能的键值数据库,常被用作分布式系统的缓存或数据存储。Redisson是基于...
java 读取 XML 使用 xml 。。。。。。。。。。。
Java的`java.util.concurrent`包提供了锁和同步原语,如`synchronized`关键字、`ReentrantLock`和`Semaphore`,用于管理并发访问。 7. **文件系统设计**:一个完整的文件系统需要考虑目录结构、文件命名规则、文件...
例如,如果文件正在被其他进程使用,可能需要实现锁机制。同时,确保在处理文件后正确关闭输入/输出流,以防止资源泄露。 总结起来,Java提供了丰富的API来处理文件操作,包括分割大文件。通过结合`FileInputStream...
该项目旨在实现h5与fastdfs之间的高性能断点续传、秒传、大文件上传以及使用redis文件锁。系统提供了文件上传、文件处理、文件存储等功能。通过该项目,开发者可以学习并实践Java技术的应用,为后续的Web开发奠定...
在Java编程环境中,加密锁(通常称为硬件保护锁或安全密钥)是一种物理设备,用于保护软件不被非法复制和使用。加密锁通常通过USB接口连接到计算机,它包含一个微处理器,可以执行复杂的加密算法,确保只有授权的...
- 为了保证操作的原子性,可以考虑在处理过程中使用文件锁,以防止在压缩过程中文件被其他进程修改。 - 如果ZIP文件非常大,解压和再压缩的过程可能会消耗大量时间和资源,因此在处理大数据量时需要谨慎设计。 6....
这里需要注意文件锁的管理,以防止并发上传时的文件冲突。 对于断点续传,`plupload`会在客户端保存上传进度,如果上传中断,用户可以继续未完成的上传,服务器端需要有相应的机制识别并处理这些续传请求。这通常...
10. **安全性**:在多线程环境下,文件操作需注意文件锁,避免同一时刻多个线程修改同一文件,造成数据混乱。 通过以上知识点的综合运用,我们可以构建一个高效、安全的多线程文件传输系统。实际编程中,还需要根据...
文件`ConnectOracle.java`可能包含了建立JDBC连接的代码。这通常涉及以下步骤: - 导入所需的JDBC库,如`import java.sql.Connection; import java.sql.DriverManager;` - 加载Oracle JDBC驱动,例如`Class.for...
很久以前的工具类代码不过很实用,java的文件读写创建目录复制,移动,文件序列化,反序列化,文件锁,xml文件的读取,诸多内容囊括其中注释也十分详细,学习文件流的不二选择
【标题】:“自己用JAVA做的一个多线程文件服务器” 这篇博客文章主要介绍了一位作者使用Java编程语言构建的多线程文件服务器。在IT行业中,文件服务器是用于存储和管理网络上共享文件的重要组件,而使用Java实现...