使用java的java.nio.channels.FileLock,实现程序对文件的独占读写.
2011-02-24 17:33
1056 查看
在多线程的程序中,如果有一个共享文件要被访问或者编辑,如何实现文件的独占模式下的读写呢?
用java.nio.channels.FileLock是一个比较好的办法,实现的思路是先new一个名字genFile.lck的文件,
在通过getChannel().tryLock()方法返回一个FileLock. 如果是没有人访问,就会返回一个不为空的引用,
如果有人正在访问,则返回null,
这样就不会打开别人正在编写的文件了,
代码如下:
private static final String GEN_LCK_FILE = "genFile.lck";
private static FileLock genLock = null;
public static void main(String args[]) {
try {
// Acquire an exclusive lock, assure manager is stand alone
genLock = new FileOutputStream(GEN_LCK_FILE).getChannel().tryLock();
if (null != genLock) {
//open the file you want!
} else {
System.err.println("this file has been open but other person!");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != genLock) {
try {
genLock.release();
// delete the lock file
new File(GEN_LCK_FILE).delete();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
提示这里的genFile.lck只是提供加锁的文件,用它来判断文件是否被访问,真正要访问修改的文件在代码中
//open the file you want!
这一行处理!
用java.nio.channels.FileLock是一个比较好的办法,实现的思路是先new一个名字genFile.lck的文件,
在通过getChannel().tryLock()方法返回一个FileLock. 如果是没有人访问,就会返回一个不为空的引用,
如果有人正在访问,则返回null,
这样就不会打开别人正在编写的文件了,
代码如下:
private static final String GEN_LCK_FILE = "genFile.lck";
private static FileLock genLock = null;
public static void main(String args[]) {
try {
// Acquire an exclusive lock, assure manager is stand alone
genLock = new FileOutputStream(GEN_LCK_FILE).getChannel().tryLock();
if (null != genLock) {
//open the file you want!
} else {
System.err.println("this file has been open but other person!");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != genLock) {
try {
genLock.release();
// delete the lock file
new File(GEN_LCK_FILE).delete();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
提示这里的genFile.lck只是提供加锁的文件,用它来判断文件是否被访问,真正要访问修改的文件在代码中
//open the file you want!
这一行处理!
相关文章推荐
- Java 字符流实现文件读写操作(FileReader-FileWriter)
- Java使用RandomAccessFile读写文件
- Java编程___File各类方法使用(实现拷贝特定文件至特定目录下)
- 使用Java实现对dbf文件的简单读写
- java.nio.channels.FileChannel 使用笔记
- Java的RandomAccessFile随机文件读写的简单使用
- 使用NIO读取文件 Java实现案例
- 使用java.nio.file.WatchService监控文件夹里的文件再操作文件出现的“文件不存在或目录不存在”的错误
- 使用Java程序来实现HTTP文件的队列下载
- Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用
- 使用JDK1.7 java.nio.file.Files.walkFileTree方法遍历文件夹下的文件
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- Java使用RandomAccessFile读写字节文件
- FileChannel类的理解和使用(java.nio.channels.FileChannel)
- java 字符流实现文件读写操作(FileReader-FileWriter)
- Java使用RandomAccessFile读写文件
- 使用POI实现在java程序中导入导出Excel文件数据
- 使用Java程序来实现HTTP文件的队列下载
- Java基础之IO流中使用FileWriter和FileReader实现拷贝文件
- 使用Java实现对dbf文件的简单读写