如何在Java中创建目录?

jim*_*mmy 366 java directory

如何创建目录/文件夹?

一旦我测试过 System.getProperty("user.home");

当且仅当新文件夹不存在时,我必须创建一个目录(目录名"新文件夹").

Boz*_*zho 488

new File("/path/directory").mkdirs();
Run Code Online (Sandbox Code Playgroud)

这里"directory"是您要创建/存在的目录的名称.

  • 比OP选择的正确答案要好得多.在创建目录之前检查目录是否存在应该成为众所周知的反模式. (30认同)
  • 是的,在上面的示例中,`directory`是名称. (8认同)
  • 如果目录已经存在怎么办?它会覆盖吗?或者跳过这个过程. (7认同)
  • @AvinashRaj请查看http://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdirs() (3认同)
  • 很明显:`返回:当且仅当创建目录时才返回true,以及所有必需的父目录; 否则就是假的 (3认同)
  • 它不会覆盖现有目录。它会返回假。 (2认同)

Jig*_*shi 439

大约7年后,我将更新它以更好的方法,这是Bozho建议的.

new File("/path/directory").mkdirs();
Run Code Online (Sandbox Code Playgroud)

推荐使用:

File theDir = new File("new folder");

// if the directory does not exist, create it
if (!theDir.exists()) {
    System.out.println("creating directory: " + theDir.getName());
    boolean result = false;

    try{
        theDir.mkdir();
        result = true;
    } 
    catch(SecurityException se){
        //handle it
    }        
    if(result) {    
        System.out.println("DIR created");  
    }
}
Run Code Online (Sandbox Code Playgroud)

  • -1:这实际上是一种非常糟糕的**技术来创建目录.对FS的访问不保留给专用资源.在`if(!theDir.exists())`和`theDir.mkdir()`之间状态可能已经改变,并且它可以在**之间改变而不是**创建目录(因为`exists`返回`真的`)并且需要它.方法"exists"的结果决不应该用于决定是否创建目录.只需调用`mkdir`,如果它已经存在则不会抛出任何异常. (237认同)
  • @mhws我知道这个帖子已经有几个月了但是如果你看一下`mkdirs`实现,从源代码中,首先调用的是`if(exists()){return false; }`.实现本身首先检查目录是否已经存在,所以这个答案唯一的错误可能就是检查条件2x.并不像你正在做的那么糟糕. (43认同)
  • 从Java 7开始,你应该使用`Files`中的方法,就像Benoit Blanchon最近的回答一样.(这个答案似乎是在Java 7之前编写的.) (5认同)
  • @mwhs我明白最好不要检查目录,但我不明白你的理由(第二部分).调用`mkdir`和需要该目录之间的状态是否也不能改变?我假设你的意思是其他一些进程删除了该目录. (4认同)
  • @Episodex目录是共享资源.只是不要使用上面的解决方案,出于不同的原因是错误的.不清楚PO怎么会认为这是正确的答案.如果您想要关于IO资源的断言,您需要使用锁,而不是布尔值. (2认同)

Ben*_*hon 137

使用Java 7,您可以使用Files.createDirectories().

例如:

Files.createDirectories(Paths.get("/path/to/directory"));
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个选项在最初的问答时并不存在,但我认为这应该是未来的答案. (11认同)
  • 值得注意的是:`与createDirectory方法不同,如果由于目录已经存在而无法创建目录,则不会引发异常. (4认同)

ahv*_*gas 37

您可以尝试FileUtils #forceMkdir

FileUtils.forceMkdir("/path/directory");
Run Code Online (Sandbox Code Playgroud)

这个有很多有用的功能.


Bur*_*man 28

mkdir vs mkdirs


如果要创建单个目录使用 mkdir

new File("/path/directory").mkdir();
Run Code Online (Sandbox Code Playgroud)

如果要创建文件夹结构的层次结构使用 mkdirs

 new File("/path/directory").mkdirs();
Run Code Online (Sandbox Code Playgroud)


Mou*_*una 21

  1. 创建一个目录.

    new File("C:\\Directory1").mkdir();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个名为"Directory2及其所有子目录"Sub2"和"Sub-Sub2"的目录.

    new File("C:\\Directory2\\Sub2\\Sub-Sub2").mkdirs()
    
    Run Code Online (Sandbox Code Playgroud)

来源:这个完美的教程,你也找到了一个使用的例子.


gro*_*roo 13

对于java 7及更高版本:

Path path = Paths.get("/your/path/string");
Files.createDirectories(path);
Run Code Online (Sandbox Code Playgroud)


Jon*_*man 7

以下方法应该做你想要的,只要确保你检查mkdir()/mkdirs()的返回值

private void createUserDir(final String dirName) throws IOException {
    final File homeDir = new File(System.getProperty("user.home"));
    final File dir = new File(homeDir, dirName);
    if (!dir.exists() && !dir.mkdirs()) {
        throw new IOException("Unable to create " + dir.getAbsolutePath();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 正如@mwhs在关于Jigar Joshi的答案的评论中提到的那样,首先检查是否存在不仅不是必需的,而且实际上是一个坏主意。 (2认同)

Pro*_*Rev 6

干净整洁:

import java.io.File;

public class RevCreateDirectory {

    public void revCreateDirectory() {
        //To create single directory/folder
        File file = new File("D:\\Directory1");
        if (!file.exists()) {
            if (file.mkdir()) {
                System.out.println("Directory is created!");
            } else {
                System.out.println("Failed to create directory!");
            }
        }
        //To create multiple directories/folders
        File files = new File("D:\\Directory2\\Sub2\\Sub-Sub2");
        if (!files.exists()) {
            if (files.mkdirs()) {
                System.out.println("Multiple directories are created!");
            } else {
                System.out.println("Failed to create multiple directories!");
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)


Shi*_*iva 5

那么在java中创建目录/文件夹我们有两种方法

如果它不存在,这里 makedirectory 方法创建单个目录。

File dir = new File("path name");
boolean isCreated = dir.mkdir();
Run Code Online (Sandbox Code Playgroud)

File dir = new File("path name");
boolean isCreated = dir.mkdirs();
Run Code Online (Sandbox Code Playgroud)

这里 makedirectories 方法将创建文件对象表示的路径中缺少的所有目录。

例如参考下面的链接(解释得很好)。希望能帮助到你!! https://www.flowerbrackets.com/how-to-create-directory-java/