我如何制作一个在关闭时删除文件的监视服务?
How i can make a Watch Service that deletes a file when it closes?
我基本上想制作一个 watch 服务(或类似的东西)来检查文件是否已被 关闭 并立即 删除 该文件,如果它确实关闭(完成执行)。
我怎样才能做到这一点?请给我一个 cmd 命令或一些代码(我更喜欢 Java)。
好的,这应该不难做到,如果你 google 稍微找到一个名为 file.canWrite()
的 Java-File 方法,基本上 returns 如果一个文件是被其他程序锁定。
所以在代码方面你可以做的是这样的。
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) {}
}
}
您需要将此代码包含到某些 Java-Program 中。我添加了一个简单的 Thread.sleep(10)
,您的 PC 不必检查 aaaaaallllllllll 时间。
参见 Check if a file is locked in Java
其他可能性是尝试使用 file.renameTo("some_path.txt");
重命名文件,因为此方法也是 returns 布尔值是否成功!请注意,您需要在删除文件之前再次更新文件。
我看到的最后一种可能性与第二种非常相似。您尝试通过调用 file.delete();
来删除该文件,如果该文件仍然存在,您知道它不成功并因此循环。
我想你的意思是当文件没有在另一个程序中打开时,你不能对另一个程序进行更改? (如果你说的是你自己的程序打开文件,这就容易多了。)
在 Windows 上,很难分辨哪个程序打开了文件。看看https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows for some options. I like the handle
tool for this, but it has to run as Administrator, which may be a problem. You can try renaming or writing to the file, as suggested at Check if a file is locked in Java
一旦你有了一个脚本来确定文件是否打开到你满意的程度,那么编写一个循环测试文件是否打开然后删除文件的脚本应该是相当简单的。
我基本上想制作一个 watch 服务(或类似的东西)来检查文件是否已被 关闭 并立即 删除 该文件,如果它确实关闭(完成执行)。
我怎样才能做到这一点?请给我一个 cmd 命令或一些代码(我更喜欢 Java)。
好的,这应该不难做到,如果你 google 稍微找到一个名为 file.canWrite()
的 Java-File 方法,基本上 returns 如果一个文件是被其他程序锁定。
所以在代码方面你可以做的是这样的。
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) {}
}
}
您需要将此代码包含到某些 Java-Program 中。我添加了一个简单的 Thread.sleep(10)
,您的 PC 不必检查 aaaaaallllllllll 时间。
参见 Check if a file is locked in Java
其他可能性是尝试使用 file.renameTo("some_path.txt");
重命名文件,因为此方法也是 returns 布尔值是否成功!请注意,您需要在删除文件之前再次更新文件。
我看到的最后一种可能性与第二种非常相似。您尝试通过调用 file.delete();
来删除该文件,如果该文件仍然存在,您知道它不成功并因此循环。
我想你的意思是当文件没有在另一个程序中打开时,你不能对另一个程序进行更改? (如果你说的是你自己的程序打开文件,这就容易多了。)
在 Windows 上,很难分辨哪个程序打开了文件。看看https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows for some options. I like the handle
tool for this, but it has to run as Administrator, which may be a problem. You can try renaming or writing to the file, as suggested at Check if a file is locked in Java
一旦你有了一个脚本来确定文件是否打开到你满意的程度,那么编写一个循环测试文件是否打开然后删除文件的脚本应该是相当简单的。