使用java的java.nio.channels.FileLock,实现程序对文件的独占读写.

    技术2022-05-20  35

    在多线程的程序中,如果有一个共享文件要被访问或者编辑,如何实现文件的独占模式下的读写呢?

     

    用java.nio.channels.FileLock是一个比较好的办法,实现的思路是先new一个名字genFile.lck的文件,

     

    在通过getChannel().tryLock()方法返回一个FileLock. 如果是没有人访问,就会返回一个不为空的引用,

     

    如果有人正在访问,则返回null,

     

    这样就不会打开别人正在编写的文件了,

     

    代码如下:

     

        private static final String GEN_LCK_FILE = "genFile.lck";     private static FileLock genLock = null;     public static void main(String args[]) {                 try {             // Acquire an exclusive lock, assure manager is stand alone             genLock = new FileOutputStream(GEN_LCK_FILE).getChannel().tryLock();             if (null != genLock) {                 //open the file you want!             } else {                 System.err.println("this file has been open but other person!");             }         } catch (FileNotFoundException e) {             e.printStackTrace();         } catch (IOException e) {             e.printStackTrace();         } finally {             if (null != genLock) {                 try {                     genLock.release();                     // delete the lock file                     new File(GEN_LCK_FILE).delete();                 } catch (IOException e) {                     e.printStackTrace();                 }             }         }     }

     

    提示这里的genFile.lck只是提供加锁的文件,用它来判断文件是否被访问,真正要访问修改的文件在代码中

     

    //open the file you want!

     

    这一行处理!


    最新回复(0)