Java tryLock函数不适用于.txt文件
若我手动打开.txt文件,然后执行代码检查文件是否打开。它总是说文件没有打开。但对于任何MS Office(.doc、.xls、.ppt)来说,相同的代码都可以正常工作 以下是代码片段:Java tryLock函数不适用于.txt文件,java,file,nio,Java,File,Nio,若我手动打开.txt文件,然后执行代码检查文件是否打开。它总是说文件没有打开。但对于任何MS Office(.doc、.xls、.ppt)来说,相同的代码都可以正常工作 以下是代码片段: File file = new File("F:\\abc.txt"); FileChannel channel = null; FileLock lock = null; try { channel = new Ran
File file = new File("F:\\abc.txt");
FileChannel channel = null;
FileLock lock = null;
try {
channel = new RandomAccessFile(file, "rw").getChannel();
// Get an exclusive lock on the whole file
try {
lock = channel.tryLock();
if (lock != null) {
System.out.println("Lock acquired on file: " + file.getAbsolutePath());
lock.release();
System.out.println("Lock released from closed file.");
System.out.println("Closing the channel of closed file.");
}
channel.close();
}
catch (OverlappingFileLockException | IOException e) {
// File is open by someone else
}
}
catch (FileNotFoundException e1) {
// File is open by someone else
}
每次,.txt文件都会获得锁,即使打开了相同的文件(这与MS Office文件的行为不同)
有没有其他方法来测试文件是否被其他进程打开/使用?问题是,windows中的大多数程序都不会锁定文本文件。例如,如果使用记事本打开文本文件,则可以将其删除。这意味着,记事本不会获取锁,因此您可以在java程序中获取锁
在你的测试中,你必须使用一个程序来锁定一个文本文件,或者重写你的程序,它会锁定一个文件,直到你关闭程序。然后你可以启动两次程序。你用什么打开文件?两种方式都不起作用:要么手动打开,双击它,要么通过code
Desktop.getDesktop()。打开(文件)
你说的“打开”是什么意思?例如,记事本不锁定文本文件。我尝试使用记事本、记事本++甚至MS Office Word打开它。如果您使用的程序不锁定文件,则在java中获得锁定是合法的。例如,如果我在记事本中打开一个文本文件,我可以删除该文件,windows不会抱怨。您必须在一个程序中打开该文件,该程序实际上会锁定该文件。谢谢您的建议。我试图添加独占锁,但用户将无法编辑此文件。除了添加锁定以查找目标文件外,他们还有其他方法打开吗?锁定的要点是用户无法编辑该文件。如果您想知道文件是否不是用常规方法打开的。但如果您的问题是:如何检测文件的修改?我建议看看新的文件io api,我认为实现了一个whatcher类。