小编Mar*_*lty的帖子

删除Java中的非空目录

假设我有一个File f代表一个目录,那么f.delete()只有当它是空的时才会删除它.我在网上找到了几个使用或获取目录中所有文件的示例,然后递归遍历目录结构并删除所有文件.但是,由于可以创建无限递归的目录结构(在Windows和Linux中(带有符号链接)),可能用这种风格编写的程序可能永远不会终止.File.listFiles()File.list()

那么,有没有更好的方法来编写这样的程序,以便它不会陷入这些陷阱?我是否需要跟踪我所经过的所有地方,并确保我不会绕圈或是否有更好的方式?

更新:回答一些答案(谢谢大家!) - 我宁愿代码没有遵循符号链接并保留在它应该删除的目录中.即使在Windows情况下,我可以依赖Commons-IO实现吗?

java recursion file-io

30
推荐指数
2
解决办法
3万
查看次数

为什么我的对象不是包<root>的成员,如果它在一个单独的源文件中?

我在访问根包中定义的对象时遇到问题.如果我将所有代码都放在一个文件中,它可以正常工作,但是当我将它分成两个文件时,我无法通过编译器.

这很好用:

所有在一个文件中称为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)

scala packages

19
推荐指数
2
解决办法
2万
查看次数

如何在Java中找到物理内存大小?

我正在编写一个安装程序,它将调整产品的配置,以便运行它的特定硬件.特别是,我想确定系统中安装了多少物理RAM,以便估计在运行时分配给产品的内存量.

理想情况下,我想以独立于平台的纯Java方式执行此操作,因为安装程序需要在几个不同的平台上运行,但如果不可能,则首选Windows解决方案,因为这是最常见的部署平台.

在这种情况下,可以安全地假设产品将是盒子上运行的唯一/主要应用程序,因此我不必担心挤压其他任何人.我不想过度分配,因为根据我们的经验,这可能会损害性能.

java memory installer memory-management

17
推荐指数
3
解决办法
1万
查看次数

如何在SWT表标题中添加"(de)全选"复选框?

我有一个SWT表,我正在使用SWT.CHECK样式进行实例化,以便在每一行旁边显示一个复选框.我的用户在表的标题行中请求了另一个复选框,以允许他们通过单击选择/取消选择所有行.

我看不出任何明显的方法,我只通过谷歌找到了Swing/JTable的例子.有谁知道如何做到这一点?我希望没有重新实现Table或退回头文件上下文菜单.

java checkbox swt

7
推荐指数
2
解决办法
7912
查看次数