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!");以上代码可以打开一个文件之后,不让其它线程或进程修改,但是在windows下一样可以打开它和复制它,我现在要做的功能是要打开一个文件之后(例如是一个EXE文件),不能给其它人打开,也不能复制或者是剪切这个文件.java怎样做到呢?大家帮一下我吧,这是项目的最后一个难题了.

解决方案 »

  1.   

    很早有讨论,kingfish板主解决了。http://blog.csdn.net/kingfish/archive/2005/05/06/372698.aspx
      

  2.   

    楼上的我看过了,他只能不让其它线程或进程修改,但是在windows下可以双击打开它,并且可以复制它,做不到我想要的功能啊~~~~
      

  3.   

    应该是可以办得到的,如果用C语言调用系统API的话,不过用JAVA就不知道行不行了.快救救我吧.
      

  4.   

    试试Runtime.getRuntime().exec("aaa.exe")
      

  5.   

    楼上的,不行啊,打开后,在windows下也可以打开和复制这个EXE文件啊,大家快帮我想个办法吧,就算要用jni调用C或C++,windows api也可以啊
      

  6.   

    大家帮一下忙吧,说说其它思想也可以啊,我只要实现打开这个EXE文件后,不可以再给别人复制和打开就行了.
      

  7.   

    如果只是在windows下。你还使用API进行访问,通过JNI进行调用,然后包装到一个class里面
      

  8.   

    谢谢Polarislee的回答,就是只在windows下就行了,不用考虑其它系统了,包装一个class在里面是什么意思,可以说清楚一点吗?
      各位,我现在有一个新的想法,就是把解密后的文件隐藏起来,只有我的java程序可以打开运行它,用户在windows下是看不见的.可以实现吗?
      

  9.   

    可惜!我对Java不输,帮不了多大的忙。
    不过,如果对C/C++比较熟的话,你可以采用另一种方式:数据拼接。将可执行文件拆解成若干个小的文件,在使用的时候拼接成一个大的内存文件在进行调用执行。