当FileLock fl = fc.tryLock();执行成功之后,当前虚拟机内其它线程,包括当前操作系统(起码win XP肯定是这样儿的),都无法访问指定的文件
D:\\SOCKET\\server_fa\\test.txt
package com.wlh.filechannel;
import java.io.File;
import java.io.FileReader;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
public class LockFile {
public LockFile() {
}
public static void main(String[] args) throws Exception {
RandomAccessFile raf = new RandomAccessFile(new File("D:\\SOCKET\\server_fa\\test.txt"),"rw");
FileChannel fc = raf.getChannel();
FileLock fl = fc.tryLock();
if (fl.isValid()) {
System.out.println("get the lock!");
//测试线程
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(100);
FileReader fr = new FileReader(new File(
"D:\\SOCKET\\server_fa\\test.txt"));
int c;
while ((c = fr.read()) != -1) {
System.out.println("OK=" + (char) c);
}
fr.close();
break;
} catch (Exception e) {
System.out.println("error=" + e);
}
}
}
}.start();
//模拟其它操作的耗时:比如用notepad打开无法修改。但是用程序来读写此文件都会异常
raf.write("我刚才被被锁定啦。。。".getBytes());
Thread.sleep(5000);
fl.release();
System.out.println("release the lock!");
}
raf.close();
}
}
分享到:
相关推荐
总结一下,文件锁定在Java NIO中通过`FileChannel`和`FileLock`提供了一种机制,用于保护文件在并发环境下的安全访问。字符集,如`Charset`,则在处理文本数据时起到桥梁作用,确保数据在不同编码格式之间的正确转换...
`FileChannel`的主要特性包括读写文件、映射内存到文件、锁定文件区域等。通过`FileInputStream`, `FileOutputStream`, `ServerSocketChannel`, `SocketChannel`等可以获取`FileChannel`实例。例如,我们可以使用`...
2. **锁定区域**:`FileLock`允许你锁定文件的特定区域,而不是整个文件。这可以通过`channel.lock(start, end, shared)`方法实现,其中`start`和`end`定义了锁定的字节范围,`shared`参数指定是共享锁(true)还是...
在实际项目中,我们还需要考虑线程安全、文件编码、文件锁定等问题。例如,多线程环境下,可能需要同步访问文件;读写文件时,确保正确设置文件编码,避免乱码问题;如果多个进程同时修改同一个文件,可能需要文件锁...
例如,RandomAccessFile和FileChannel的文件锁提供了低级别的文件访问控制,适用于需要精确锁定文件特定部分的情况;而使用`synchronized`关键字则更易于理解和实现,但可能会增加锁竞争导致的性能开销。在选择解决...
10. **文件锁定**:在多线程环境中,可能需要对文件进行锁定以防止并发访问导致的数据不一致。Java的`FileLock`接口可以实现文件锁。 11. **临时文件**:`java.io.TempFile`类可以帮助创建临时文件,它们在程序结束...
例如,`FileChannel`用于文件操作,`FileLock`用于锁定文件。 9. **文件路径和URL**:`Path`接口和`Paths`类是Java 7引入的,用于处理文件路径;`java.net.URL`类则用于表示统一资源定位符,可用来访问网络资源。 ...
6. 文件锁定 在多线程环境中,为防止多个线程同时对同一文件进行读写,可以使用文件锁。Java中的`FileChannel`提供了锁机制,其他语言也有类似功能。 7. 文件路径 在处理文件时,理解文件路径的格式至关重要。绝对...
要锁定一个文件,需要首先打开文件,并获取文件通道,然后使用 tryLock() 方法锁定文件。 以下是一个简单的 Java 文件锁实现示例: ```java public class FileLocker { public static void main(String[] args) ...
在实际应用中,我们还可以添加一些额外的功能,如进度条显示、异常处理、文件锁定等,以增强工具类的实用性。同时,为了保证程序的健壮性,应考虑在文件操作前检查源文件和目标文件的可用性,以及在复制过程中处理...
它提供了多种操作,如读取、写入、映射和锁定文件区域等。 * 读取和写入操作:FileChannel提供了多种读取和写入操作,可以以不影响通道当前位置的方式,对文件中绝对位置的字节进行读取或写入。 * 映射操作:...
`FileLock`是Java `java.nio.channels.FileChannel`类的一个方法,它提供了锁定文件的能力。这种锁是独占的,即一旦一个进程获得了锁,其他试图获取相同锁的进程将被阻塞,直到锁被释放。这种机制对于处理共享文件...
9. **文件锁(File Locking)**:NIO提供了一种锁定文件部分区域的能力,这对于多线程或多进程共享文件时的数据同步非常重要。 NIO的使用虽然相对复杂,但它提供了更高效、灵活的I/O操作方式,尤其适用于处理大量...
`FileLock`是Java NIO(非阻塞I/O)的一部分,它允许程序锁定一个文件或者文件的部分区域,以防止其他进程同时读写该文件。这种方式特别适用于需要在多个进程中保持数据一致性的场景,例如日志记录、配置文件管理等...
`FileLock`类可以用于锁定文件的某一部分,防止其他线程同时修改。 11. 文件系统设计:在实现文件管理系统算法时,需要考虑文件的存储结构(如哈希表、B树、B+树等)、文件索引、文件的并发访问控制、文件权限管理...
5. **锁定**:FileChannel还支持文件部分的锁定,用于多线程或进程间的同步。 ### 选择器(Selectors) Java NIO的选择器(Selector)是其最独特的特性之一,它允许单线程管理多个通道。通过注册感兴趣的通道到...
在本文中,我们将详细介绍如何使用 `FileLock` 对象来实现排他锁,包括如何创建 `FileLock` 对象,如何锁定文件,以及如何释放锁定。 首先,让我们来看一下 `FileLock` 对象的使用方法。`FileLock` 对象可以通过 `...
Java NIO提供了FileChannel,支持文件的读写、映射和文件锁定等操作。例如,可以使用transferTo()和transferFrom()方法在两个通道之间高效地传输数据。 6. **内存映射文件(Memory-Mapped File)**: 这是一种...
例如,FileChannel是用于与文件交互的通道,可以进行文件的读写和锁定。 Buffer是NIO中的另一个关键概念,它是一个容量固定的容器,用于暂存数据。数据从Channel读入或写入Buffer,然后从Buffer传输到Channel。...
- Java NIO提供了文件锁定功能,可以实现对文件的独占访问,防止多个进程或线程同时修改同一文件。 10. **NIO与IO的比较** - IO基于流,是面向字节的,通常是阻塞的;而NIO基于通道和缓冲区,是面向缓冲区的,...