Java File.setWritable()并在JDK 6u18之后停止正常工作

我们有一个带有特定模块的Java应用程序,它在执行其function之前检查临时目录是否“可写”。 为了测试这个,我们有一个JUnit测试,它创建一个新目录,使用Java File类方法setWritable(false)使目录“不可写”,然后将该目录传递给正在测试的模块,并期望得到一个IllegalArgumentException返回。 在JDK 6u18下,这一切都很好地工作了很长时间。

今天我已经将JDK版本更新为JDK 6u24(截至今天,Sun网站的当前版本)。 该unit testing刚刚开始使用新的JDK失败。 我在团队内部询问并发现其他人曾经试图在他们的机器上运行JDK 6u23并且在相同的JUnit测试中遇到同样的问题(并且只有那个测试 – 其他一切正常)。

更新到更新的JDK后,是否有其他人遇到过setWritable()方法的问题? 知道如何解决这个问题吗?

在你提问之前,我也试过使用setReadonly()方法作为替代,但我得到了相同的结果。

如果您使用的是Windows,则可能与此错误有关: http : //bugs.sun.com/bugdatabase/view_bug.do?video_id = 6728842

显然, setWritable(false)从未真正用于Windows上的目录,因为readonly标志实际上并不会使目录只读。