质量宣传提醒 - JDK 25:Windows上某些文件操作行为的变化
内容提要
OpenJDK质量小组正在推动使用OpenJDK构建测试FOSS项目,以提升发布质量。Windows上的File.delete方法已更改,不再删除只读文件,且路径名以空格结尾时文件操作将失败。建议更新依赖于旧行为的应用程序。
关键要点
-
OpenJDK质量小组正在推动使用OpenJDK构建测试FOSS项目,以提升发布质量。
-
Windows上的File.delete方法已更改,不再删除只读文件,返回false。
-
建议更新依赖于旧行为的应用程序,以在删除文件前清除文件属性。
-
引入了系统属性以恢复旧行为,使用-Djdk.io.File.allowDeleteReadOnlyFiles=true可以恢复删除只读文件的功能。
-
Windows上路径名以空格结尾的文件操作将失败,相关操作如File::mkdir和File::createNewFile会返回false或抛出IOException。
-
之前的JDK版本中,操作这些非法路径的文件可能会看似成功,但实际上并未成功。
延伸解读
文件删除行为的变化
在JDK 25中,Windows上的File.delete方法不再删除只读文件,这一变化可能会影响依赖于旧行为的应用程序。开发者需要注意,删除文件前应先清除文件的只读属性,以避免操作失败。
路径名尾部空格的影响
新的JDK版本中,路径名尾部的空格将导致文件操作失败。这意味着开发者在处理文件路径时需特别小心,确保路径合法,以避免因路径问题导致的异常或错误。
恢复旧行为的选项
为了适应新变化,OpenJDK提供了一个系统属性选项,可以通过设置-Djdk.io.File.allowDeleteReadOnlyFiles=true来恢复旧的删除只读文件的行为。这为需要兼容旧版本的应用程序提供了灵活性。
延伸问答
JDK 25对Windows上的File.delete方法做了什么改变?
JDK 25中,File.delete方法不再删除只读文件,返回false。
如何恢复JDK 25中File.delete的旧行为?
可以通过设置系统属性-Djdk.io.File.allowDeleteReadOnlyFiles=true来恢复旧行为。
在Windows上,路径名以空格结尾会导致什么问题?
路径名以空格结尾的文件操作将失败,相关操作会返回false或抛出IOException。
为什么建议更新依赖于旧File.delete行为的应用程序?
因为旧行为可能导致文件删除失败,建议在删除前清除文件属性以确保成功。
OpenJDK质量小组的目标是什么?
OpenJDK质量小组旨在通过使用OpenJDK构建测试FOSS项目来提升发布质量。
JDK 25之前File.delete方法的行为是什么?
在JDK 25之前,File.delete会先移除只读属性,然后删除文件,可能导致文件保留但属性被修改。