我们有一个带有特定模块的 Java 应用程序,该模块在执行其功能之前检查临时目录是否“可写”。为了对此进行测试,我们有一个创建新目录的 JUnit 测试,使用 Java File
类方法 setWritable(false)
使目录“不可写”,然后通过该目录到正在测试的模块,并期望得到一个 IllegalArgumentException
返回。这在 JDK 6u18 下已经运行了很长时间。
今天,我已将 JDK 版本更新为 JDK 6u24(Sun 站点截至今天的最新版本)。该单元测试刚开始在新的 JDK 中失败。我在我的团队中四处询问,发现其他人不久前曾尝试在他们的机器上运行 JDK 6u23,并且在相同的 JUnit 测试中遇到了同样的问题(并且仅在该测试中 - 其他一切正常)。
更新到较新的 JDK 后,是否有其他人遇到过 setWritable()
方法的问题?知道如何解决这个问题吗?
在你问之前,我也尝试过使用 setReadonly()
方法作为替代方法,但我得到了相同的结果。
最佳答案
如果您使用的是 Windows,则可能与此错误有关:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6728842
显然 setWritable(false)
从未真正对 Windows 上的目录起作用,因为 readonly 标志实际上并没有使目录只读。
关于file - Java File.setWritable() 并在 JDK 6u18 之后停止正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302269/