gpt4 book ai didi

java - 无法访问 Java 创建的文件——有时

转载 作者:行者123 更新时间:2023-11-29 04:02:19 27 4
gpt4 key购买 nike

在 Java 中,我正在使用在 WinXP 下运行的代码来创建如下文件:


public synchronized void store(Properties props, byte[] data) {
try {
File file = filenameBasedOnProperties(props);
if ( file.exists() ) {
return;
}
File temp = File.createTempFile("tempfile", null);
FileOutputStream out = new FileOutputStream(temp);
out.write(data);
out.flush();
out.close();
file.getParentFile().mkdirs();
temp.renameTo(file);
}
catch (IOException ex) {
// Complain and whine and stuff
}
}

有时,当以这种方式创建文件时,即使应用程序未运行,代码外部也几乎完全无法访问它(尽管负责打开和读取文件的代码没有问题)。当通过 Windows 资源管理器访问时,我无法移动、重命名、删除甚至打开该文件。在 Cygwin 下,当我 ls -l 目录时得到以下信息:

ls: cannot access [big-honkin-filename]
total 0
?????????? ? ? ? ? ? [big-honkin-filename]

正如所暗示的那样,文件名很大,但在 XP 下超过 260 个字符(尽管它们略多于 200 个字符)。

为了进一步增加我的计算机只是想让我感到愚蠢的感觉,有时这段代码创建的文件是完全正常的。我发现的唯一模式是,一旦目录中的一个文件“锁定”,其余的都被搞砸了。

有没有人以前遇到过这样的事情,或者对这里发生的事情有任何见解?

最佳答案

确保您始终在 finally block 中关闭流。在您的情况下,如果抛出异常,流可能不会关闭并且会泄漏文件句柄。你可以使用 procexp从 SysInternals 查看哪个进程持有该文件的句柄。

关于java - 无法访问 Java 创建的文件——有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2630771/

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