在java程序中,用Desktop类调用notepad打开一个.txt类,由于文件文件本身的问题,无法检测到文件是否关闭。
查了很多资料,有童鞋说可以测文件所在文件夹是否被锁,实测在windows系统中双击打开是可行的,但是用Desktop类在java程序中这个方法不可行。
求解 Desktop类打开文件和在windows系统中双击打开有什么不同?如何才能检测一个.txt文件是否正在被打开?
另,cmd和rundll32打开文件的方法都试过了...都不行。

解决方案 »

  1.   

    看的稀里糊涂的,如何才能检测一个.txt文件是否正在被打开?
    内核有文件描述符对应于每一个被打开的文件,而且一定是最小的未被使用的,所以你可以调用open系统调用来看看得到的文件描述符是不是为3(0,1,2被标准输出,输入和错误流给占用了),如果不为3说明这个文件被其他进程打开过。当然上面的是Linux中的概念,我不确定Windows上是不是也这样规定的。
    对于java来说有个抽象叫FileDescriptor代表文件描述符。
      

  2.   

    说一下我的应用场景吧。
    我现在需要写一个小插件,用于编辑文件。在点击保存时,需要保证文件已经关闭。对于.doc等格式的文件,采用重命名的方法检测,但是.txt格式的文件不能用这个方法。所以采用重命名文件夹的方式。(.txt文件在编辑时,文件本身不锁定,绝对路径锁定)但是使用中发现在系统中采用双击打开的方式上述验证方法成立,而用java代码打开文件,上述验证方法不成立。
      

  3.   


    我要做的不仅仅是读取文件,我要打开编辑(使用系统默认打开方式,notepad)。