在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个字符)。

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

有人曾经遇到过这样的事情,或者对这里发生的事情有任何见解吗?

最佳答案

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

您可以使用更长的路径名(包括父文件夹名的文件名)创建文件,但是此后将无法访问它们。在这些情况下,我得到的错误是找不到该文件。为了摆脱这些文件,我必须缩短父文件夹的名称,直到路径长度足够短。

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

10-11 22:36
查看更多