java FileLock在win7下和ubuntu下行为不一样?

fairjm 2012-07-20 11:18:15
最近在ubuntu下装了JDK eclipse Tomcat等等一堆东西 打算熟悉下在linux-based的系统下怎么工作
然后刚刚在win7为了好玩测试了一个程序 用来锁住一个java文件 然后用javac 其实我是为了看看会得到怎么样的出错信息(有个人出现了个不能读取java的错误信息 后来发现是权限问题 而不是文件找不到或者文件名等其他原因)
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的跨平台性不是被减弱了嘛..
...全文
163 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-07-21
  • 打赏
  • 举报
回复
这是操作系统对文件管理的差异性造成的,具体可以去Google下关于Linux的文件管理。

这么说吧,Linux系统中,你甚至可以直接删除一个已经被Tomcat打开了而且还正在拼命写信息的日志文件。
龙四 2012-07-21
  • 打赏
  • 举报
回复
这与操作系统相关
正如LS所说,在linux下当一个文件正在使用的时候,可以使用rm将其删除
而在win下文件正在使用,删除的时候会报错

系统内部机制不一样

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧