0

我目前正在迁移到 Java 7,并且正在尝试转换我的所有类以使用新java.nio.file包。有一次,我尝试使用类似于以下代码的内容检查文件是否可读和可写:

MyClass myObject = new MyClass();
Path path = Paths.get("testDir/sub1/sub2/test.txt");
myObject.setReadable(Files.isReadable(path));
myObject.setWritable(Files.isWritable(path));

当我用junit(在Windows 7上)进行测试时,两者isReadable();isWritable();在它们返回之前始终挂起25秒。这是非常不可接受的。这可能是 Windows 限制吗?
我的应用程序最终将在 unix 上运行,但我还没有机会对其进行测试。我想我应该提到我正在测试的每个文件都是使用以下代码创建的:

Files.createFile(Paths.get("testDir/sub1/sub2/test.txt"));

我能做些什么来帮助加快速度吗?谢谢!

编辑:所以它似乎path.toFile().canRead()立即返回,canWrite() 也是如此。如果涉及到它,我可以使用这些方法,但我真的很想只使用 java.nio.file 包。

4

1 回答 1

0

您使用的是什么版本的 JRE?要解决此问题,请将 JRE 更新到 1.7.0_40+

导致此的问题:

在 Windows 上检查文件访问是昂贵的,因为它需要读取 DACL 并计算对文件的有效访问。为了绕过这一点,Windows 上的 checkAccess 实现为检查读取案例提供了一个快速路径,但不幸的是 Files.isReadable 没有使用该快速路径。

更多详情请参见:http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7168172

于 2014-01-08T10:16:57.937 回答