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

无法访问Java创建的文件--有时,java,file-io,windows-xp,Java,File Io,Windows Xp,在Java中,我使用在WinXP下运行的代码创建如下文件: public synchronized void store(Properties props, byte[] data) { try { File file = filenameBasedOnProperties(props); if ( file.exists() ) { return; } File

在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:无法访问[大honkin文件名]
总数0
?????????? ? ? ? ?            ? [big honkin文件名]

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

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


以前有没有人遇到过类似的情况,或者对这里发生的事情有什么见解?

请确保始终在
finally
块中关闭流。在您的情况下,如果抛出异常,流可能无法关闭,并将泄漏文件句柄。您可以使用from SysInternals查看哪个进程持有文件的句柄。

确保始终在
finally
块中关闭流。在您的情况下,如果抛出异常,流可能无法关闭,并将泄漏文件句柄。您可以使用from SysInternals查看哪个进程持有文件的句柄。

尽管根据定义,NTFS应该处理最多2^15-1的路径长度,但实际上路径长度限制为255


您可以创建路径名较长的文件(文件名包括父文件夹名),但以后无法访问这些文件。在这些情况下,我得到的错误是找不到文件。要删除这些文件,我必须缩短父文件夹的名称,直到路径长度足够短。

尽管根据定义,NTFS应处理最多2^15-1的路径长度,但实际上路径长度限制为255


您可以创建路径名较长的文件(文件名包括父文件夹名),但以后无法访问这些文件。在这些情况下,我得到的错误是找不到文件。要删除这些文件,我必须缩短父文件夹的名称,直到路径长度足够短。

这是一个合理的建议和值得的调整,但它不会引发异常,因此这似乎不太可能是我的根本原因。Process Explorer没有显示任何人拥有该文件的句柄;我在查找->查找句柄或DLL中输入文件名。。。并在搜索中获得0个匹配项。合理的建议和值得的调整,但不会引发异常,因此这似乎不太可能是我的根本原因。Process Explorer没有显示任何人拥有该文件的句柄;我在查找->查找句柄或DLL中输入文件名。。。并在搜索中获取0个匹配项。(OT)您不需要在即将关闭文件时刷新-close()完成所有需要的刷新。您应该检查mkdirs和renameTo(OT)的返回值。您不需要在即将关闭文件时刷新-close()你应该检查mkdirs和rename的返回值,这正是它的本质。谢谢天哪,这就是事实。谢谢 ls: cannot access [big-honkin-filename] total 0 ?????????? ? ? ? ? ? [big-honkin-filename]