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`是Java提供的一种机制,允许我们锁定一个文件或文件的一部分,从而在多个进程之间实现互斥访问。这个压缩包“使用FileLock实现进程的互斥.rar”可能包含了一些示例代码,帮助开发者理解如何在Java中使用`...
1. **单实例程序的概念**:单实例程序是指只能在一个进程中运行的程序,当试图再次启动该程序时,系统会检查是否已经有该程序的实例在运行,如果有,则不再启动新的实例,而是将焦点切换到已存在的实例。 2. **实现...
1. **通道(Channels)**:通道是数据传输的路径,可以从一个数据源读取数据或向一个目的地写入数据。例如,FileChannel用于文件操作,SocketChannel用于网络通信。 2. **缓冲区(Buffers)**:缓冲区是数据存储的...
在软件开发过程中,有时候我们需要限制应用程序只能运行一个实例,以避免资源浪费或逻辑错误。本篇文章将基于提供的VB(Visual Basic)代码示例来详细探讨如何实现这一功能。 #### 知识点一:理解程序多开问题 在...
单例模式是软件工程设计模式中的一种,其核心在于确保一个类仅有一个实例存在,并且提供一个全局访问点供外部调用。在C#中实现单例模式,通常是为了控制资源的访问,例如数据库连接、日志记录器或配置管理等,这些...
FileLock 是一个抽象类,提供了锁定文件的方法。要锁定一个文件,需要首先打开文件,并获取文件通道,然后使用 tryLock() 方法锁定文件。 以下是一个简单的 Java 文件锁实现示例: ```java public class File...
在本文中,我们将探讨如何使用Java编程语言创建一个简单的记事本应用。这个应用的核心功能包括打开、编辑和保存文本文件。以下是如何实现这些功能的关键知识点: 1. **Java Swing**: Java Swing是Java Foundation ...
1 5一个简单的Java应用程序的开发过程 1 6一个简单的Java小应用程序 1 7什么是JSP 习题 第2章标识符 关键字和数据类型 2 1标识符和关键字 2 2Java的基本数据类型 2 3Java的数组 习题 第3章运算符 表达式和语句 3 1...
Java的`java.nio.channels.FileLock`可以用来解决这个问题,确保同一时间只有一个进程能访问特定的文件部分。 6. **信号量(Semaphores)和互斥锁(Mutexes)**:Java的`java.util.concurrent`包提供了`Semaphore`...
以下是一个简单的文件锁定示例: ```java try (FileChannel channel = FileChannel.open(Paths.get("test.txt"), StandardOpenOption.READ, StandardOpenOption.WRITE)) { FileLock lock = channel.lock(); // ...
SQLite是一个轻量级、自包含的数据库引擎,常用于嵌入式系统和移动应用。在处理多进程环境时,数据安全性和一致性是首要考虑的问题。"多进程互斥写SQLite"的主题就是探讨如何在多个进程中确保对SQLite数据库进行安全...
`FastCopyFile.java`可能会展示如何创建FileChannel,从源文件读取数据到一个ByteBuffer,然后将该缓冲区的数据写入目标文件的FileChannel,以此实现高效的文件复制。 接下来,我们来看`UseFloatBuffer.java`。...
- 构造一个新的 `MainFrameGUI` 实例并调用 `execute()` 方法。 - 如果在初始化过程中发生异常,则记录异常信息。 #### 5. 执行方法 ```java public void execute() { EventQueue.invokeLater(new Runnable() { ...
Java 2实用教程的第10章主要涵盖了Java的输入输出流系统,这是Java编程中一个非常关键的领域,因为它允许程序与外部世界交互,包括读取和写入文件、处理用户输入以及与其他应用程序通信。以下是对各知识点的详细解释...
在使用EasyExcel之前,我们需要定义一个数据模型类,该类的属性与Excel表头一一对应。例如: ```java public class Student { private String name; private int age; // getters and setters } ``` 5. **...
在给定的压缩包“FileLock”中,可能包含了一个名为“FileLock”的C#项目,该项目实现了上述的文件加解密功能。你可以导入到Visual Studio 2013环境中运行,通过选择要加密或解密的文本文件,来验证其功能。在实际...
11. **观察者模式**:观察者模式是一种行为设计模式,定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 12. **装饰模式**:装饰模式动态地给对象添加新...
1. **文件操作**:使用FileChannel进行文件的读写,例如将一个文件复制到另一个文件。 2. **网络通信**:使用SocketChannel和ServerSocketChannel进行客户端和服务器端的连接与数据传输。 3. **多路复用**:通过...
Java IO 支持文件锁定机制,通过`FileLock`类可以防止多个进程同时修改同一个文件,从而保证数据的一致性和完整性。 #### 六、后续可以探讨的问题 - 如何有效地处理大文件的读写操作? - 如何利用NIO的新特性来...
本章主要讨论了4个核心的抽象类:InputStream(字节输入流)、OutputStream(字节输出流)、Reader(字符输入流)和Writer(字符输出流),它们是所有I/O流的基础。 文件操作是Java中的一项基础功能。Java使用`File...