好吧 实在是闲的没事 就把原来的一些笔记翻出来看了看 翻到个比较有意思的
我是java小白一只
群里有个人说出现了个不能读取java的错误信息(后来发现是文件没传完啊 怨念! 而不是文件找不到或者文件名等其他原因)
然后就想是不是因为文件被占用了 于是写了个小东西试试看:
[mw_shl_code=java,true]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();
}
}[/mw_shl_code]
很简单的一个小例子
Text.java无非就是helloworld之类的以上是用来锁的代码在win下我先在一个cmd下运行这个程序然后我在30s内在另一个cmd下用javacText.java 会出现:读取Text.java时出错,另一个程序已锁定文件的一部分,进程无法访问本来以上就结了但那时(其实也就1个月前啦)还装了ubuntu 12.04(gnome常常卡死不动啊有木有......)
然后就在那边也试着运行了下:
居然发现可以在锁定的情况下正常编译那个Text.java 甚至可以修改 删除........
瞬间不淡定了....去csdn上问 回答说 在linux内核的系统中你甚至可以直接删除运行的程序......
这就对跨平台的结果一致性产生了冲击 但问题的本身还是来源于系统底层的本身 系统本身允许了这样的行为 和跨平台本身没关
所以 这一结果对于java的跨平台是没错的
但你要了解点平台的知识 不然会出现让你很费解的情况(我以上的例子.....)
以上..
需要更有有关linux内核的系统关于删除运行时文件的说明?:
