在Java中,如何在当前工作目录中创建目录

在Java中,如何在当前工作目录中创建目录,java,filesystems,Java,Filesystems,在我的Java应用程序的当前工作目录下创建名为“Foo”的目录(如果它还不存在的话),最简洁的方法是什么 或者,从一个稍有不同的角度:Java与.NET中的Directory.CreateDirectory(“Foo”)的等价物是什么?Java.io包没有目录类,但您可以在文件类上使用mkdir()方法: (new File("Foo")).mkdir() 请注意,mkdir()有两种不同的故障模式: “如果存在安全管理器,且其checkWrite()方法不允许创建命名目录”,则将抛出Secu

在我的Java应用程序的当前工作目录下创建名为“Foo”的目录(如果它还不存在的话),最简洁的方法是什么


或者,从一个稍有不同的角度:Java与.NET中的
Directory.CreateDirectory(“Foo”)
的等价物是什么?

Java.io包没有
目录
类,但您可以在
文件
类上使用
mkdir()
方法:

(new File("Foo")).mkdir()
请注意,
mkdir()
有两种不同的故障模式:

  • “如果存在安全管理器,且其
    checkWrite()
    方法不允许创建命名目录”,则将抛出
    SecurityException
  • 如果操作因其他原因失败,
    mkdir()
    将返回false。(更具体地说,当且仅当创建目录时,它将返回true。)
  • 第1点是可以的-如果你没有权限,抛出。第2点有点次优,原因有三:

  • 您需要检查此方法的布尔结果。如果忽略结果,操作可能会自动失败
  • 如果得到错误的返回,则不知道操作失败的原因,这使得恢复或形成有意义的错误消息变得困难
  • 合同中严格的“当且仅当”措辞还意味着,如果目录已经存在,则该方法返回false
  • 旁白:对比点3与 NET的行为
    Directory.CreateDirectory()
    如果目录存在,则不执行任何操作。 这样做是有道理的——“创建一个 目录”;“好的,目录是 创建”。如果是,有关系吗 现在或更早创建;由此 过程还是其他?如果你真的 关心那件事你不是在问另一个问题吗 问题:“这个目录存在吗?”

    下一个警告是
    mkdir()
    一次不会创建多个目录。对于我的名为“Foo”的目录的简单示例,这很好;但是,如果要在目录Foo中创建名为Bar的目录(即创建目录“Foo/Bar”),则必须记住使用
    mkdirs()
    方法

    因此,要解决所有这些注意事项,您可以使用以下帮助器方法:

    public static File createDirectory(String directoryPath) throws IOException {
        File dir = new File(directoryPath);
        if (dir.exists()) {
            return dir;
        }
        if (dir.mkdirs()) {
            return dir;
        }
        throw new IOException("Failed to create directory '" + dir.getAbsolutePath() + "' for an unknown reason.");
    }
    

    我看到了您的
    createDirectory
    方法的一种更简洁的形式:

    File f = new File(xyz);
    if (!f.exists() && !f.mkdirs()) throw new IOException("Could not create directory " + f);
    

    可能还值得检查
    f
    是否存在,但它不是一个目录。

    您提出了一个问题,并立即发布了自己的答案?以前见过,这个想法是,发布问答组合的用户希望对一些问题给出一个彻底的答案,这些问题在上下文中可能看起来很简单,这将引导那些还不知道如何回答的人找到自己的答案。在我看来完全可以接受,尽管有点困惑。啊,现在我知道Stackoverflow愿景()的“博客”部分是如何产生的:)你问了一个问题,并立即发布了自己的答案?-1。发布问题和答案似乎很奇怪。堆栈溢出不是供您演讲的麦克风。+1。可以发布您自己的问题和答案。有助于社区和有用的未来参考。如果人们不同意你的答案,那么他们可以提供更好的答案。在Meta上快速搜索似乎同意这一点。根据我之前的评论:+1也在中的顶部
    提问和回答自己的问题也很好,但要假装自己处于危险之中:用问题的形式表达出来。