java中 文件读写问题 我现在需要一个 排外读写文件的机制 就是 一个应用中一旦有一个线程对一个文件操作(包括读写) 则其它线程就不能对该文件进行任何操作。同一个文件操作线程互斥 但不同文件需要可以个并发处理。不知道 java 中有没有相关机制 可以使用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本来想贴到blog上, 不过csdn的blog老有问题供参考import java.io.*;import java.nio.channels.*;/** * 锁住文件(不让其它线程或进程修改) * * @author kingfish */public class LockFile { public LockFile() { } public static void main(String[] args) throws Exception { RandomAccessFile raf = new RandomAccessFile(new File("c:\\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("c:\\test.txt")); int c; while ( (c = fr.read()) != -1) { System.out.println( (char) c); } fr.close(); break; } catch (Exception e) { System.out.println(e); } } } }.start(); //模拟其它操作的耗时:比如用notepad打开无法修改。但是用程序来读写此文件都会异常 raf.write("kingfish(八百里秦川@龙城异客)".getBytes()); Thread.sleep(5000); fl.release(); System.out.println("release the lock!"); } raf.close(); }} FileChannel.tryLock()不就可以了吗 如何快速扫描局域网内所有IP的某一个端口是否开启 Applet的显示问题 删除文件问题(多层目录) 大家说说swing把!!! 如何将"123,125-127"分解成"123,125,126,127"? 定义的JLabel显示不出来? 关于instanceof的问题! 请问怎样把ORACLE中的CLOB字段的数据转换成STRING的数据?急! 请问各位一个巨简单的问题! 各位大虾我的逻辑有问题吗? 请高手帮忙指点一下,如何把一个java应用程序做为windows的服务,开机时自动运行?? 关于修改日期的问题
供参考import java.io.*;
import java.nio.channels.*;/**
* 锁住文件(不让其它线程或进程修改)
*
* @author kingfish
*/public class LockFile {
public LockFile() {
} public static void main(String[] args) throws Exception { RandomAccessFile raf = new RandomAccessFile(new File("c:\\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("c:\\test.txt"));
int c;
while ( (c = fr.read()) != -1) {
System.out.println( (char) c);
}
fr.close();
break;
}
catch (Exception e) {
System.out.println(e);
}
}
}
}.start(); //模拟其它操作的耗时:比如用notepad打开无法修改。但是用程序来读写此文件都会异常
raf.write("kingfish(八百里秦川@龙城异客)".getBytes());
Thread.sleep(5000); fl.release();
System.out.println("release the lock!");
}
raf.close();
}
}