Java 7的Files.isReadable()和isWritable()需要很长时间才能返回

时间:2013-05-01 14:07:31

标签: java java-7

我目前正在迁移到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包。

1 个答案:

答案 0 :(得分:0)

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

导致此问题:

  

检查Windows上的文件访问权限很昂贵,因为它需要   读取DACL并计算对文件的有效访问。至   绕过这个,Windows上的checkAccess实现有一个快速路径   对于检查读取案例,但遗憾的是Files.isReadable未使用   快速的道路。

有关详细信息,请参阅:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7168172