代码之家  ›  专栏  ›  技术社区  ›  Daniel Fortunov

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

  •  6
  • Daniel Fortunov  · 技术社区  · 15 年前

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

    Directory.CreateDirectory("Foo") 在.NET中?

    2 回复  |  直到 15 年前
        1
  •  8
  •   Daniel Fortunov    15 年前

    java.io包没有 Directory mkdir() 关于 File

    (new File("Foo")).mkdir()
    

    mkdir() 有两种不同的故障模式:

    1. “如果存在安全管理器及其 checkWrite() 方法不允许创建命名目录“然后 SecurityException 将被抛出。
    2. 如果操作因其他原因失败, mkdir() 当且仅当 已创建目录。)

    第1点是可以的,如果你没有权限,抛出。第2点有点次优,原因有三:

    1. 您需要检查此方法的布尔结果。如果忽略结果,操作可能会自动失败。
    2. 如果得到错误的返回,则不知道操作失败的原因,这使得恢复或形成有意义的错误消息变得困难。
    3. 合同中严格的“当且仅当”措辞还意味着,如果目录已经存在,则该方法返回false。

    旁白:对比点3与 NET的行为 Directory.CreateDirectory() 哪一个 如果目录存在,则不执行任何操作。 这种“创造一个新的世界”是有道理的 目录“;”好的,目录是 创建”。如果是,有关系吗 现在或更早创建;由此 过程还是其他?如果你真的 问题:“这个目录存在吗?”

    下一个警告是 mkdir() 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.");
    }
    
        2
  •  1
  •   Sam Barnum    15 年前

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

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

    f 存在但不是目录。