`

简单的FileLock实例

    博客分类:
  • java
阅读更多
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileLockDemo {

	/**
	 * Filelock 防止程序在运行期间,线程在访问文件的过程中修改文件导致Buffer中
	 * 的部分或者全部内容不可读,造成程序异常。
	 * 例子中展示的是新开以个线程访问主线程Filelock的文件。
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		File file = new File("D://in.txt");
		FileOutputStream fis = new FileOutputStream(file);
		FileChannel fc = fis.getChannel();
		FileLock flock = fc.tryLock();
		if(flock.isValid()){
			System.out.println(file.getName()+ "is locked");
		}
		new Thread(){
			public void run(){
				try{
					File file = new File("D://in.txt");
					FileOutputStream fi = new FileOutputStream(file);
					fi.write('b');
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}.run();
		flock.release();
		System.out.println(file.getName()+ "is released");
		fc.close();
		fis.close();
	}

}

 结果是该文件无法被新起的线程访问,运行结果:
in.txtis locked
java.io.IOException: The process cannot access the file because another process has locked a portion of the file
at java.io.FileOutputStream.write(Native Method)
at com.cn.tibco.nio.FileLockDemo$1.run(FileLockDemo.java:32)
at com.cn.tibco.nio.FileLockDemo.main(FileLockDemo.java:37)
in.txtis released

分享到:
评论

相关推荐

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

    在压缩包中的`SDK_Test_One`和`SDK_Test_Two`可能是两个独立的测试项目,它们可能包含了使用`FileLock`的实例代码。而`JavaApk源码说明.txt`可能是关于这些源码的解释或指南,`下载更多打包源码~.url`则可能指向了更...

    计算机软件-商业源码-184 禁止程序执行多个实例.zip

    - **Java**:可以使用`FileLock`或者基于Socket的解决方案来实现。 - **Python**:可以使用`multiprocessing`库中的`Lock`或`Semaphore`,或者文件锁。 4. **多线程与多进程**:在多线程或多进程环境中,单实例...

    NIO实例

    4. **文件系统API**:包括FileChannel、FileLock等,用于文件的读写和锁定。 5. **管道(Pipes)**:用于两个线程间的数据传输。 描述中提到的"博文链接:https://smallbee.iteye.com/blog/2008119"可能提供了一个...

    vb源码——禁止程序多开

    这种方法的优点是简单易用,但是需要注意的是,`App.PrevInstance`属性仅适用于在同一台计算机上运行的情况,并且只能检测到由同一用户账户启动的实例。如果程序需要在不同用户账户下或者跨计算机的情况下禁止多开,...

    C#单例模式

    单例模式的关键在于私有化构造函数,防止外部直接实例化该类,并提供一个静态方法作为获取实例的唯一入口。以下是一个典型的C#单例模式实现: ```csharp public class Singleton { private static volatile ...

    java 文件锁的简单实现

    java 文件锁的简单实现 文件锁是指对文件的访问和修改进行控制和限制,以确保文件的安全性和一致性。在 Java 中,可以使用 FileLock 类...通过使用 FileLock 类可以简单地实现文件锁,从而提高文件的隐私性和安全性。

    JAVA GUI SWING

    程序首先检查是否有其他实例正在运行,然后允许用户选择语言设置,最后设置应用程序的外观并显示主窗口。此外,还涉及到了日志记录、多线程处理等方面的知识点。这对于学习Java Swing和桌面应用程序开发具有很好的...

    Java2实用教程.rar

    10 11文件锁FileLock 10 12Process类中的流 10 13带进度条的输入流 习题 第11章Java网络的基本知识 11 1使用URL 11 2读取URL中的资源 11 3显示URL资源中的HTML文件 11 4处理超链接 11 5InetAdress类 11 6套接字 11 7...

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

    在本篇中,我们将深入探讨这两个主题,并结合具体代码实例来理解它们的用法。 首先,我们来看文件锁定。在Java NIO中,`FileChannel`类提供了文件锁定的功能。通过调用`FileChannel.lock()`方法,我们可以尝试获取...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO...对于初学者来说,这些源码实例可以帮助理解Java NIO的基本用法和优势,进一步提升在实际项目中的应用能力。

    使用Java制作一个简单的记事本

    然后创建`CharsetEncoder`和`CharsetDecoder`实例,用于在内存文本与磁盘文件之间转换字符。 8. **文件操作流程**: - 用户点击“打开”菜单项,`fd_load`显示对话框,用户选择文件。 - 使用`RandomAccessFile`...

    java高级+struts2总结

    高级特性如对象序列化流、文件Channel、NIO(非阻塞I/O)和FileLock用于提高并发访问文件的安全性。 2. **设计模式**:设计模式是解决软件设计中常见问题的经验总结,包括单例模式、工厂模式、观察者模式、装饰模式...

    Java 2实用教程课件(第3版第10章).ppt

    11. **FileLock文件锁**:在多线程环境中,FileLock提供了一种机制来独占访问文件,防止多个线程同时修改同一文件。 12. **Process类中的流**:当创建进程时,Process类提供了与子进程通信的输入、输出和错误流,...

    C#des对文件进行加密解密

    在给定的压缩包“FileLock”中,可能包含了一个名为“FileLock”的C#项目,该项目实现了上述的文件加解密功能。你可以导入到Visual Studio 2013环境中运行,通过选择要加密或解密的文本文件,来验证其功能。在实际...

    基于Java的进程通信.zip

    在操作系统中,进程是程序的一次执行实例,每个进程都有自己的内存空间和系统资源。当一个程序运行时,它会创建至少一个进程。在Java中,我们可以使用`java.lang.ProcessBuilder`类来创建和控制新的操作系统进程。 ...

    easyexcel-master.zip

    EasyExcel是一款由阿里巴巴开源的Java工具库,专为简单、高效的处理Excel而设计。在Android项目中,虽然EasyExcel原本是为Java Web环境设计的,但通过一些适配和调整,我们依然可以将其应用到Android环境中,实现...

    main:待办事项 | CS2103T软件工程

    托多 CS2103T软件工程 要求 安装了 Maven 插件的 Eclipse Luna。 JDK 8u20。 学分 Java 日期和时间(Joda-Time - ) JavaFX 托盘图标(Gist by Jewelsea - ) JKeyMaster (Tulskiy - ) ... 单实例(FileLock - )

    java nio 入门

    Java NIO并非简单的输入输出API的替代,而是提供了一种新的I/O模型。传统IO基于流(Stream)进行数据读写,而NIO基于通道(Channel)和缓冲区(Buffer)。NIO的核心特点是它支持非阻塞I/O操作,可以显著提高程序的效率,...

    JavaPD-Ch09mao文件及输入输出流1

    总之,Java中的文件操作和输入输出流构成了强大的工具集,允许开发者灵活地处理各种数据源和目标,无论是简单的文本文件,还是复杂的二进制数据,或是网络通信,都能得心应手。通过熟练掌握这些概念和API,开发者...

    多进程互斥写sqlite

    在操作系统中,进程是程序的一次执行实例,每个进程都有自己的内存空间,它们之间默认是并行执行且相互独立的。因此,当多个进程同时尝试写入同一个SQLite数据库时,如果没有适当的同步机制,就可能出现数据冲突和不...

Global site tag (gtag.js) - Google Analytics