java - tryLock 功能不适用于 .text 文件

标签 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 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 中的大多数程序都不会锁定文本文件。例如,如果您使用记事本打开文本文件,则可以将其删除。这意味着,notepad 不会获取锁,因此您可以在 java 程序中获取锁。

对于您的测试,您必须使用一个实际锁定文本文件的程序,或者重写您的程序,它会锁定一个文件,直到您关闭该程序。然后您可以启动您的程序两次。

关于java - tryLock 功能不适用于 .text 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399310/

相关文章:

Java NIO 服务器/客户端聊天应用程序 - 仅通过关闭套接字发送数据

java - 在 linux 上设置类路径以运行 java 程序

javascript - 如果没有扩展名,node path.extname 返回空字符串

java - 确定文件是否为链接

java - pom.xml 无法解析父级?

java - 如何使用 Java 7 Files API 等待操作完成?

java - 使用 Netty 进行管道流式传输

java - 从 imageview Android 中删除图像

Java 线程等待锁定它已经锁定的对象

java - 无法获取 JAXBContext?