作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码执行想要延迟运行。 (假设 10 秒后)。在此代码执行中,我需要检查提供的文件是否确实是“正常”文件而不是目录。
for (File f : pAttachments) {
f.isFile(); // returns true, if file is a "normal" file
}
Timer tx = new java.util.Timer();
tx.schedule(new java.util.TimerTask() {
@Override
public void run() {
for (File f : pAttachments) {
f.isFile(); // returns false, even if file is a "normal" file
}
tx.cancel();
}
}, 10000);
我期望的是计时器中的执行会像外部执行一样运行,但事实并非如此。这种行为有原因吗?
最佳答案
mikeb 和 VGR 都对。涉及一个清理步骤,删除了附件。我没有想到检查文件是否仍然存在,因为我假设 f.isFile() 会抛出异常,但事实并非如此。
我删除/更改了清理,因此提供的文件不会直接删除。之后计时器中的代码返回 f.isFile() 的正确结果。
关于java.io.File.isFile() 在不同线程中返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57593603/
我是一名优秀的程序员,十分优秀!