java FileLock在win7下和ubuntu下行为不一样?
最近在ubuntu下装了JDK eclipse Tomcat等等一堆东西 打算熟悉下在linux-based的系统下怎么工作
然后刚刚在win7为了好玩测试了一个程序 用来锁住一个java文件 然后用javac 其实我是为了看看会得到怎么样的出错信息(有个人出现了个不能读取java的错误信息 后来发现是权限问题 而不是文件找不到或者文件名等其他原因)
Java code
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class TryLock{
public static void main(String args[]) throws Exception{
File file=new File("Text.java");
FileOutputStream pis=new FileOutputStream(file,true);
FileChannel fc=pis.getChannel();
FileLock fl=fc.tryLock();
System.out.println(fl);
Thread.sleep(30*1000);
if(fl!=null){
fl.release();
}
fc.close();
}
}
Text.java无非就是helloworld之类的
以上是用来锁的代码 在win下 我先在一个cmd下运行这个程序 然后我在30s内 在另一个cmd下 用javac Text.java 会出现:
读取Text.java时出错,另一个程序已锁定文件的一部分,进程无法访问。
然后用文本编辑器读Text.java 文件也是空白 30s后 恢复正常
但是在ubuntu下 我也如上操作 并且打开了两个terminal 发现一切正常可以正常编译Text.java 然后用ubuntu下的文本编辑器也是可以正常打开 保存的(我确定没有过30s 我一直看着另一个terminal的)
对了 忘说了 Text.java在ubuntu下的权限操作没有问题 我是rw和rwx都试过 还是一样的
是linux-based的和win在进程管理方面不一样导致的嘛? 但这样的话 java的跨平台性不是被减弱了嘛..
------解决方案--------------------
这是操作系统对文件管理的差异性造成的,具体可以去Google下关于Linux的文件管理。
这么说吧,Linux系统中,你甚至可以直接删除一个已经被Tomcat打开了而且还正在拼命写信息的日志文件。
------解决方案--------------------
这与操作系统相关
正如LS所说,在linux下当一个文件正在使用的时候,可以使用rm将其删除
而在win下文件正在使用,删除的时候会报错
系统内部机制不一样