java - 为什么 Files.deleteDirectoryContents() 在 Guava 中被弃用?

标签 java guava deprecated

在 Guava 10+ 中,Google 弃用了 Files.deleteDirectoryContents() . JavaDoc 说

Deprecated. This method suffers from poor symlink detection and race conditions. This functionality can be supported suitably only by shelling out to an operating system command such as rm -rf or del /s. This method is scheduled to be removed from Guava in Guava release 11.0

我对为什么存在竞争条件感到困惑。我认为这种方法实际上很有用,并且发现对操作系统进行炮击是一个糟糕的解决方案。作者能否分享做出此决定的原因?

最佳答案

I am confused on why there is a race condition.

例如,假设一个线程调用 Files.deleteDirectoryContents() 并且第二个线程(或外部进程)同时在目录中创建一个新文件。

当你从通话中返回时,你能相信目录是空的吗?不!

无论如何,如果您发现此方法的功能很有用……尽管它有缺陷……您可以随意复制代码,对其进行调整,然后将其嵌入到您的应用程序中。 (只需检查 Guava 源代码许可证并确保您符合它。)

Can the authors share why the made this decision?

我认为他们已经有了;请参阅弃用通知。如果您需要更多信息,请尝试搜索问题跟踪器和 Guava 讨论组。您甚至可以尝试在讨论组中礼貌地提问,但如果您的议程是改变他们的想法,我怀疑您会成功。

关于java - 为什么 Files.deleteDirectoryContents() 在 Guava 中被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8320376/

相关文章:

java - FileBackedOutputStream 用例( Guava )

objective-c - 在 Objective C 中使用已弃用的方法是否错误

java - 处理已弃用的方法

android webview setDatabasePath 已弃用

java - 在jQuery中读取json数据并附加到textarea

guava - 如何将 PriorityBlockingQueue 与 ListeningExecutorService 一起使用?

java - 使用第一个元素和附加集合进行列表初始化

java - 如何扩展 Java 以引入引用传递?

java - Path2D -- .contain() 不起作用

java - 使用 Hadoop 进行 MapReduce, "Ouput file directory already exists"