在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/