假设我有一个File f
代表一个目录,那么f.delete()
只有当它是空的时才会删除它.我在网上找到了几个使用或获取目录中所有文件的示例,然后递归遍历目录结构并删除所有文件.但是,由于可以创建无限递归的目录结构(在Windows和Linux中(带有符号链接)),可能用这种风格编写的程序可能永远不会终止.File.listFiles()
File.list()
那么,有没有更好的方法来编写这样的程序,以便它不会陷入这些陷阱?我是否需要跟踪我所经过的所有地方,并确保我不会绕圈或是否有更好的方式?
更新:回答一些答案(谢谢大家!) - 我宁愿代码没有遵循符号链接并保留在它应该删除的目录中.即使在Windows情况下,我可以依赖Commons-IO实现吗?
我在访问根包中定义的对象时遇到问题.如果我将所有代码都放在一个文件中,它可以正常工作,但是当我将它分成两个文件时,我无法通过编译器.
这很好用:
所有在一个文件中称为packages.scala
:
object Foo
val name = "Brian"
}
package somepackage {
object Test extends App {
println(Foo.name)
}
}
Run Code Online (Sandbox Code Playgroud)
见证人:
$ scalac packages.scala
$ scala -cp . somepackage.Test
Brian
Run Code Online (Sandbox Code Playgroud)
但是如果我将代码分成两个文件:
packages.scala
object Foo {
val name = "Brian"
}
Run Code Online (Sandbox Code Playgroud)
packages2.scala
package somepackage {
object Test extends App {
println(Foo.name)
}
}
Run Code Online (Sandbox Code Playgroud)
一切都失败了:
$ scalac packages.scala packages2.scala
packages2.scala:3: error: not found: value Foo
Run Code Online (Sandbox Code Playgroud)
所以我尝试引用Foo
绝对:
...
println(_root_.Foo.name)
...
Run Code Online (Sandbox Code Playgroud)
但这也不起作用:
$ scalac packages.scala packages2.scala
packages2.scala:3: error: object …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个安装程序,它将调整产品的配置,以便运行它的特定硬件.特别是,我想确定系统中安装了多少物理RAM,以便估计在运行时分配给产品的内存量.
理想情况下,我想以独立于平台的纯Java方式执行此操作,因为安装程序需要在几个不同的平台上运行,但如果不可能,则首选Windows解决方案,因为这是最常见的部署平台.
在这种情况下,可以安全地假设产品将是盒子上运行的唯一/主要应用程序,因此我不必担心挤压其他任何人.我不想过度分配,因为根据我们的经验,这可能会损害性能.
我有一个SWT表,我正在使用SWT.CHECK
样式进行实例化,以便在每一行旁边显示一个复选框.我的用户在表的标题行中请求了另一个复选框,以允许他们通过单击选择/取消选择所有行.
我看不出任何明显的方法,我只通过谷歌找到了Swing/JTable的例子.有谁知道如何做到这一点?我希望没有重新实现Table或退回头文件上下文菜单.