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

时间:2011-03-14 17:45:11

标签: file permissions java readonly

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

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

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

在您提出要求之前,我还尝试使用setReadonly()方法作为替代方案,但我得到的结果相同。

1 个答案:

答案 0 :(得分:5)

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

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