gpt4 book ai didi

Java File.exists 和其他文件操作为现有文件返回错误结果(网络、macosx)

转载 作者:行者123 更新时间:2023-11-30 11:29:37 24 4
gpt4 key购买 nike

文件系统 AirportHDD 从一开始就挂载 (AFP),当我启动这个小程序时文件就存在了。我试图找出一整天为什么以下方法不起作用,但找不到任何解决方案:

public static void main(String[] arguments)
{
while(1==1)
{
File f=new File(
"/Volumes/AirportHDD/test/lock.csv");
System.out.println(f.exists());
AmySystem.sleep(100);
}
}

输出是:真的,真的,……

一旦我从另一台计算机上删除文件(AirportHDD 是通过网络安装的硬盘),输出就会一直说:真的,真的,……当我打开 finder 并转到此目录时,输出更改为:false, false, ...

再次添加文件时(通过另一台电脑)输出仍然是:假的,假的,...

但是如果你再次打开 finder 并点击目录并且 finder 显示现有文件,输出突然变为:false, true, true, true, ...

注意:

  • 只要 java “认为”文件不存在,所有其他文件操作(如打开以供读取)也会失败

  • 如果程序本身正在创建和删除文件,则不会出现问题

  • 刚刚测试时发现用 samba 共享一切都可以,但是用 AFP 就不行

有没有办法告诉 java 做与 finder 相同的事情,比如刷新,或者不要尝试缓存,无论如何?

最佳答案

我想您可能正在寻找 WatchService . Oracle 也很友好地提供了一个 tutorial .

由于无法保证这些链接的生命周期,我将在几分钟内编辑示例代码。我只是想让你知道,我想我找到了一些东西,以防你想开始自己研究。

更新按照链接教程,我想出了这样的代码。我不确定它是否会起作用(没有时间测试它),但它可能足以让您入门。 WatchService 还有一个等待事件的 take() 方法,这意味着您可以根据您提供的最后一个输出假设文件存在(或不存在) .这实际上取决于该程序将与之交互的内容。

如果这行得通,那就太好了。如果没有,也许我们可以根据您遇到的任何错误找出解决方法。或者,如果其他人比我更熟悉此代码,他们可能会出现并提供此代码的更好版本(或完全更好的选择)。

public static void main(String[] arguments) {
Path path = Paths.get("/Volumes/AirportHDD/test/lock.csv");
WatchService watcher = FileSystems.getDefault().newWatchService();
WatchKey key = null;
try {
key = path.register(watcher,
ENTRY_CREATE,
ENTRY_DELETE);
} catch (IOException x) {
System.err.println(x);
}

while(true) {//I tend to favor this infinite loop, but that's just preference.
key = watcher.poll();
if(key != null) {
for (WatchEvent<?> event: key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();

if (kind == OVERFLOW || kind == ENTRY_DELETE) {
System.out.println(false);
}
else if (kind == ENTRY_CREATE) {
System.out.println(true);
}
}//for(all events)
}//if(file event occured)
else {
File f=new File(path);
System.out.println(f.exists());
}//else(no file event occured)

AmySystem.sleep(100);
}//while(true)
}//main() method

关于Java File.exists 和其他文件操作为现有文件返回错误结果(网络、macosx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com