ファイルが使用中であるかどうかをJavaで判定する方法
Javaでファイルがロックされているかどうかを判断するメソッドは次のとおりです。
- FileChannel
- tryLock()
- tryLock()
- その文章を日本語に自然に言い換えてください。オプションは 1 つだけでかまいません。
File file = new File("path/to/file");
FileChannel channel = FileChannel.open(file.toPath(), StandardOpenOption.WRITE);
FileLock lock = null;
try {
lock = channel.tryLock();
if (lock != null) {
// 文件未被占用
System.out.println("File is not locked");
} else {
// 文件被占用
System.out.println("File is locked");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (lock != null) {
try {
lock.release();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
- java.nio.channels.FileChannel
- ロックします
- ブロック
- false
- ロック
- オーバーラッピングファイルロック例外
File file = new File("path/to/file");
FileChannel channel = FileChannel.open(file.toPath(), StandardOpenOption.WRITE);
FileLock lock = null;
try {
lock = channel.lock(0L, Long.MAX_VALUE, false);
// 文件未被占用
System.out.println("File is not locked");
} catch (OverlappingFileLockException e) {
// 文件被占用
System.out.println("File is locked");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (lock != null) {
try {
lock.release();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
- Java.nio.file.Files API
- 読み取り可能かどうかを示す
- 書き込み可能か?
File file = new File("path/to/file");
if (!Files.isReadable(file) || !Files.isWritable(file)) {
// 文件被占用
System.out.println("File is locked");
} else {
// 文件未被占用
System.out.println("File is not locked");
}
なお、これらのメソッドは他のプロセスまたはスレッドにファイルが占有されているかどうかを判定するだけで、他のプログラムに占有されているかどうかを判定するものではないことに注意してください。