Я тестирую блокировку файлов NIO, полученную с помощью FileChannel.open () и RandonAccessFile.getChanel ().
Обнаружено, что файл, который FileLock получил с помощью FileChannel.open (), можно переместить во время получения FileLock. RandonAccessFile.getChanel () не.
FileChannel.open ()
File file = new File("../tmp/test.txt");
FileChannel fileChannel = FileChannel.open(file.toPath(), StandardOpenOption.WRITE);
FileLock fileLock = fileChannel.lock();
System.out.println("file locked");
boolean result = file.renameTo(new File("../tmp/test2.txt"));
System.out.println("rename result " + result);
fileLock.release();
fileChannel.close();
RandonAccessFile.getChanel ()
File file = new File("../tmp/test.txt");
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rws");
FileChannel newChannel = (randomAccessFile).getChannel();
FileLock fileLock = newChannel.lock();
System.out.println("File locked");
boolean result = file.renameTo(new File("../tmp/test2.txt"));
System.out.println("rename result " + result);