`
wlh269
  • 浏览: 455597 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FileChannel锁定文件

    博客分类:
  • J2SE
阅读更多
当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();
	}
}


1
0
分享到:
评论

相关推荐

    NIO学习系列:文件锁定和字符集

    总结一下,文件锁定在Java NIO中通过`FileChannel`和`FileLock`提供了一种机制,用于保护文件在并发环境下的安全访问。字符集,如`Charset`,则在处理文本数据时起到桥梁作用,确保数据在不同编码格式之间的正确转换...

    【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip

    `FileChannel`的主要特性包括读写文件、映射内存到文件、锁定文件区域等。通过`FileInputStream`, `FileOutputStream`, `ServerSocketChannel`, `SocketChannel`等可以获取`FileChannel`实例。例如,我们可以使用`...

    java文件锁的实现

    2. **锁定区域**:`FileLock`允许你锁定文件的特定区域,而不是整个文件。这可以通过`channel.lock(start, end, shared)`方法实现,其中`start`和`end`定义了锁定的字节范围,`shared`参数指定是共享锁(true)还是...

    IO文件读取

    在实际项目中,我们还需要考虑线程安全、文件编码、文件锁定等问题。例如,多线程环境下,可能需要同步访问文件;读写文件时,确保正确设置文件编码,避免乱码问题;如果多个进程同时修改同一个文件,可能需要文件锁...

    5种解决Java独占写文件的方法

    例如,RandomAccessFile和FileChannel的文件锁提供了低级别的文件访问控制,适用于需要精确锁定文件特定部分的情况;而使用`synchronized`关键字则更易于理解和实现,但可能会增加锁竞争导致的性能开销。在选择解决...

    在Java里处理文件的技巧Java开发Java经验技巧共5

    10. **文件锁定**:在多线程环境中,可能需要对文件进行锁定以防止并发访问导致的数据不一致。Java的`FileLock`接口可以实现文件锁。 11. **临时文件**:`java.io.TempFile`类可以帮助创建临时文件,它们在程序结束...

    IO流读取和创建文件

    例如,`FileChannel`用于文件操作,`FileLock`用于锁定文件。 9. **文件路径和URL**:`Path`接口和`Paths`类是Java 7引入的,用于处理文件路径;`java.net.URL`类则用于表示统一资源定位符,可用来访问网络资源。 ...

    文件读写操作小结

    6. 文件锁定 在多线程环境中,为防止多个线程同时对同一文件进行读写,可以使用文件锁。Java中的`FileChannel`提供了锁机制,其他语言也有类似功能。 7. 文件路径 在处理文件时,理解文件路径的格式至关重要。绝对...

    java 文件锁的简单实现

    要锁定一个文件,需要首先打开文件,并获取文件通道,然后使用 tryLock() 方法锁定文件。 以下是一个简单的 Java 文件锁实现示例: ```java public class FileLocker { public static void main(String[] args) ...

    java写的一个实用的高速复制大文件的工具类

    在实际应用中,我们还可以添加一些额外的功能,如进度条显示、异常处理、文件锁定等,以增强工具类的实用性。同时,为了保证程序的健壮性,应考虑在文件操作前检查源文件和目标文件的可用性,以及在复制过程中处理...

    JavaNIO.pdf

    它提供了多种操作,如读取、写入、映射和锁定文件区域等。 * 读取和写入操作:FileChannel提供了多种读取和写入操作,可以以不影响通道当前位置的方式,对文件中绝对位置的字节进行读取或写入。 * 映射操作:...

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

    `FileLock`是Java `java.nio.channels.FileChannel`类的一个方法,它提供了锁定文件的能力。这种锁是独占的,即一旦一个进程获得了锁,其他试图获取相同锁的进程将被阻塞,直到锁被释放。这种机制对于处理共享文件...

    NIO 入门.chm,NIO 入门.chm

    9. **文件锁(File Locking)**:NIO提供了一种锁定文件部分区域的能力,这对于多线程或多进程共享文件时的数据同步非常重要。 NIO的使用虽然相对复杂,但它提供了更高效、灵活的I/O操作方式,尤其适用于处理大量...

    FileLock进程互斥

    `FileLock`是Java NIO(非阻塞I/O)的一部分,它允许程序锁定一个文件或者文件的部分区域,以防止其他进程同时读写该文件。这种方式特别适用于需要在多个进程中保持数据一致性的场景,例如日志记录、配置文件管理等...

    文件管理系统算法

    `FileLock`类可以用于锁定文件的某一部分,防止其他线程同时修改。 11. 文件系统设计:在实现文件管理系统算法时,需要考虑文件的存储结构(如哈希表、B树、B+树等)、文件索引、文件的并发访问控制、文件权限管理...

    Java语言基础教程-Java NIO流篇3

    5. **锁定**:FileChannel还支持文件部分的锁定,用于多线程或进程间的同步。 ### 选择器(Selectors) Java NIO的选择器(Selector)是其最独特的特性之一,它允许单线程管理多个通道。通过注册感兴趣的通道到...

    Java编程实现排他锁代码详解

    在本文中,我们将详细介绍如何使用 `FileLock` 对象来实现排他锁,包括如何创建 `FileLock` 对象,如何锁定文件,以及如何释放锁定。 首先,让我们来看一下 `FileLock` 对象的使用方法。`FileLock` 对象可以通过 `...

    NIO.rar_NIO_java nio

    Java NIO提供了FileChannel,支持文件的读写、映射和文件锁定等操作。例如,可以使用transferTo()和transferFrom()方法在两个通道之间高效地传输数据。 6. **内存映射文件(Memory-Mapped File)**: 这是一种...

    java new IO

    例如,FileChannel是用于与文件交互的通道,可以进行文件的读写和锁定。 Buffer是NIO中的另一个关键概念,它是一个容量固定的容器,用于暂存数据。数据从Channel读入或写入Buffer,然后从Buffer传输到Channel。...

    java-NIO 指南

    - Java NIO提供了文件锁定功能,可以实现对文件的独占访问,防止多个进程或线程同时修改同一文件。 10. **NIO与IO的比较** - IO基于流,是面向字节的,通常是阻塞的;而NIO基于通道和缓冲区,是面向缓冲区的,...

Global site tag (gtag.js) - Google Analytics