Ami*_*far 9 java deprecated guava
在Guava 10+中,Google弃用了Files.deleteDirectoryContents().JavaDoc说
已过时.该方法存在差的符号链检测和竞争条件.只有通过外壳操作系统命令(例如rm -rf或del/s)才能适当地支持此功能.计划在Guava版本11.0中从Guava中删除此方法
我很困惑为什么会有竞争条件.我认为使用这种方法实际上是有用的,并找到一个糟糕的解决方案.作者可以分享为什么做出这个决定?
我很困惑为什么会有竞争条件.
例如,假设一个线程调用Files.deleteDirectoryContents(),第二个线程(或外部进程)同时在目录中创建一个新文件.
当您从通话中返回时,您是否可以依赖该目录为空?不!
无论如何,如果您发现此方法的功能有用......尽管存在缺陷......您可以自由地复制代码,进行调整并将其嵌入到您的应用程序中.(只需检查Guava源代码许可证并确保符合它.)
作者可以分享为什么做出这个决定?
我认为他们已经拥有; 请参阅弃用通知.如果您需要更多,请尝试搜索问题跟踪器和Guava讨论组.您甚至可以尝试礼貌地询问讨论组,但如果您的议程改变主意,我怀疑您会成功.
竞争条件可能比"目录可能不为空"更糟糕,这部分是因为符号链接检测不佳.请考虑以下代码段:
// Symbolic links will have different canonical and absolute paths
if (!directory.getCanonicalPath().equals(directory.getAbsolutePath())) {
return;
}
... delete its contents ...
Run Code Online (Sandbox Code Playgroud)
如果directory在检查过程中是一个普通目录,但是后面的符号链接/,deleteDirectoryContents将很乐意尝试擦除整个文件系统.
也许有一种解决方法,但我们还没有找到它.对潜在的安全漏洞进行临时修复是可怕的.
| 归档时间: |
|
| 查看次数: |
5235 次 |
| 最近记录: |