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