如何使用Java创建目录和子目录结构?

28

你好,我想使用Java创建目录和子目录。我的目录结构从当前应用程序目录开始,也就是在当前项目目录中,看起来像下面这样...

Images
   |
   |+ Background
   |
   |+ Foreground
          |
          |+Necklace
          |+Earrings
          |+Etc...

我知道如何创建目录,但我需要创建子目录。我尝试过以下代码,请问下一步该怎么做?

File file = new File("Images");
file.mkdir();

3
提醒一下,虽然和上下文无关,但是“necklace”的正确拼写应该是带有字母“a”,而不是“e”。请注意。 - Michael Aaron Safyan
你看过File类了吗? - Scary Wombat
谢谢兄弟FYI :) 是的,我已经尝试过这个 File createImages = new File("Images"); createImages.mkdir(); destinationDir=createImages.getAbsolutePath(); - Gopal00005
但我找不到如何在图像目录中创建子目录。 - Gopal00005
6个回答

50
您可以使用 File.mkdir()File.mkdirs() 来创建目录。两者中,后者更加宽容并会根据需要创建所有中间目录。另外,由于我在您的问题中看到了 "\\",我建议使用File.separator 作为可移植路径分隔符字符串。

29

Java 7开始,您可以使用java.nio.file.Filesjava.nio.file.Paths类。

Path path = Paths.get("C:\\Images\\Background\\..\\Foreground\\Necklace\\..\\Earrings\\..\\Etc");

try {
    Files.createDirectories(path);
} catch (IOException e) {
    System.err.println("Cannot create directories - " + e);
}

这是一个巧妙的解决方案(因为我只使用了一条路径来到达整个结构)。

如果您不喜欢复杂的解决方案,您可以使用4个简单的路径:

Path p1 = Paths.get("C:\\Images\\Background");
Path p2 = Paths.get("C:\\Images\\Foreground\\Necklace");
Path p3 = Paths.get("C:\\Images\\Foreground\\Earrings");
Path p4 = Paths.get("C:\\Images\\Foreground\\Etc");

然后对它们都调用createDirectories方法:

Files.createDirectories(p1);
Files.createDirectories(p2);
Files.createDirectories(p3);
Files.createDirectories(p4);

这非常方便,尤其是在单元测试期间创建临时目录时。 - Christian.D

7
您可以使用File.mkdirs()创建所有父目录。
File.mkdirs() - 创建由此抽象路径名指定的目录,包括任何必需但不存在的父目录。请注意,如果此操作失败,则可能已成功创建某些必需的父目录。

4
您可以直接使用file.mkdirs()方法,它会创建子目录。
String path = images + File.separator + Background + File.separator + Foreground + File.separator + Necklace + File.separator  + Earrings ;
File file = new File( path );
file.mkdirs();

4
您可以使用File#mkdirs()来完成这个操作,具体代码如下:
// The "/" is cross-platform safe as a path-separator in Java.
// So is "\\" but that's twice the characters!
String path = createImages.getAbsolutePath() + "/Images";
File f = new File(path);
if (!f.isDirectory()) {
  boolean success = f.mkdirs();
  if (success) {
    System.out.println("Created path: " + f.getPath());
  } else {
    System.out.println("Could not create path: " + f.getPath());
  }
} else {
  System.out.println("Path exists: " + f.getPath());
}

根据链接的Javadoc文档,此方法会创建指定的抽象路径名所表示的目录,包括必要但不存在的父目录。请注意,如果此操作失败,则可能已成功创建了一些必要的父目录。


0

在 @ROMANIA_engineer 的回答基础上补充一点...

我使用了 Path.resolve() 方法,使用变量(如 DateTime 等)创建子目录:

private final Path root = Paths.get("target\\");
private final Path batchFilePath = Paths.get(root.resolve(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyymmdd_HHmmss"))).toString());

Files.createDirectory(root);
Files.createDirectory(batchFilePath);

结果是: 目录/子目录示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接