【问题标题】:Java File.setWritable() and stopped working correctly after JDK 6u18Java File.setWritable() 并在 JDK 6u18 之后停止正常工作
【发布时间】:2011-07-15 04:59:40
【问题描述】:

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

今天我已将 JDK 版本更新为 JDK 6u24(截至今日,来自 Sun 站点的当前版本)。该单元测试刚开始使用新的 JDK 失败。我在我的团队中四处打听,发现其他人不久前曾尝试在他们的机器上运行 JDK 6u23,并且在相同的 JUnit 测试中遇到了同样的问题(并且仅在该测试中 - 其他一切正常)。

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

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

【问题讨论】:

  • 是的!这是一个错误,而且变得更糟了!在 7.xxx 版本上,我尝试设置一个可写目录,我得到了成功的回复,但是……该文件夹是只读的。这在 Windows 7 和打开的 Suse 11.4 上都会发生。我还检查了这个错误已经超过 3 年了,而且没有人修复过。

标签: file permissions java readonly


【解决方案1】:

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

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

【讨论】:

  • 感谢错误链接。听起来这可能是我们问题的根源。我们的模块代码依赖于 isWritable() 方法并在生产环境中运行在 Linux 上,所以我们可能没问题。我只需要重新编写 JUnit 测试(适用于 Windows),这样我们就不再依赖这些 API 方法了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2016-09-07
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多