我如何制作手表服务,以便在文件关闭时删除文件?

时间:2019-07-12 13:31:54

标签: java windows cmd system watchservice

我基本上想提供一个观看服务(或类似的服务),以检查文件是否已关闭,并立即删除文件是否关闭(完成执行)。

我该如何实现?请给我一个 cmd 命令或一些代码(我更喜欢 Java )。

2 个答案:

答案 0 :(得分:1)

好吧,这并不难,如果您在Google上稍作搜索,就会发现一个名为:的Java文件方法,该方法基本上会在文件被其他程序锁定的情况下返回。

因此,按代码进行操作是这样的。

file.canWrite()

您需要将此代码包含到某些Java程序中。我添加了一个简单的boolean isDeleted = false; File f = new File (// Put your file here); while (!isDeleted) { if (f.canWrite()) { f.delete(); isDeleted = true; } else { try { Thread.sleep(10); // Throws Exception you need to catch somewhere... } catch (Exception e) {} } } ,您的PC不必检查aaaaaalllllllll时间。 参见Check if a file is locked in Java

其他可能性是尝试使用Thread.sleep(10)重命名文件,因为此方法还返回布尔值,是否成功!请注意,然后您需要在删除文件之前再次更新文件。

我看到的最后一种可能性与第二种非常相似。您尝试通过调用file.renameTo("some_path.txt");来删除文件,如果该文件仍然存在,您会知道它不成功并因此而循环。

答案 1 :(得分:0)

我假设您的意思是当文件未在另一个程序中打开时,您无法更改该另一个程序? (如果您正在谈论自己的程序来打开文件,这会容易得多。)

在Windows上,很难分辨哪个程序打开了文件。看一下https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows的一些选项。我喜欢handle工具,但是它必须以管理员身份运行,这可能是个问题。您可以按照Check if a file is locked in Java

的建议尝试重命名或写入文件

一旦有了确定文件是否满意的脚本,编写一个在测试文件是否打开然后删除文件时循环运行的脚本应该非常简单。