如何创建目录/文件夹?
一旦我测试了System.getProperty("user.home");
如果"new folder"不存在,我必须创建一个名为"new folder"的目录。
new File("/path/directory").mkdirs();
这里的"directory"是你想要创建或存在的目录的名称。
经过约7年时间,我将按照Bozho建议的更好方法进行更新。
File theDir = new File("/path/directory");
if (!theDir.exists()){
theDir.mkdirs();
}
if(!theDir.exists())
和theDir.mkdir()
之间,状态可能已经发生了变化,也可能在不创建目录(因为exists
返回true
)并需要它之间发生变化。方法exists
的结果不应用于决定是否创建目录。只需调用mkdir
,如果它已经存在,则不会抛出异常。 - mwhsmkdir
和需要该目录之间,状态不能发生变化吗?我猜你的意思是其他进程删除了该目录。 - Episodexmkdirs
的实现源代码,第一件事就是调用if (exists()) { return false; }
。 实现本身首先检查目录是否已经存在,因此这篇答案唯一可能的问题可能是检查该条件2次。不像你所描述的那样糟糕。 - Michael HogensonFiles
中的方法,就像Benoit Blanchon在最新的答案中所示。 (这个答案似乎是在Java 7之前编写的。) - Brick使用Java 7,您可以使用Files.createDirectories()
。
例如:
Files.createDirectories(Paths.get("/path/to/directory"));
directory.toPath()
。 - Ruslan Stelmachenko如果您想要创建单个目录,请使用 mkdir
。
new File("/path/directory").mkdir();
如果您想创建一个文件夹层次结构,请使用 mkdirs
new File("/path/directory").mkdirs();
创建一个单一的目录。
new File("C:\\Directory1").mkdir();
创建一个名为“Directory2”的目录及其所有子目录“Sub2”和“Sub-Sub2”。new File("C:\\Directory2\\Sub2\\Sub-Sub2").mkdirs()
来源:这篇完美的教程,你也可以在其中找到一个使用示例。
对于Java 7及以上版本:
Path path = Paths.get("/your/path/string");
Files.createDirectories(path);
在创建目录或文件之前检查其是否存在似乎是不必要的,来自createDirectories javadocs:
通过首先创建所有不存在的父目录来创建目录。与createDirectory方法不同,如果由于已经存在而无法创建目录,则不会抛出异常。 attrs参数是可选的文件属性,在创建不存在的目录时原子地设置。每个文件属性都由其名称标识。如果数组中包含相同名称的多个属性,则除最后一次出现外,其余所有属性均被忽略。
如果此方法失败,则可能在创建了一些但不是全部的父目录之后失败。
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();
}
}
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!");
}
}
}
}
提醒大家,如果你调用File.mkdir()
或File.mkdirs()
方法,请注意File
对象是目录而不是文件。例如,如果你为路径/dir1/dir2/file.txt
调用mkdirs()
方法,它将创建一个名为file.txt
的文件夹,这可能不是你想要的结果。如果你想要创建一个新文件并自动创建父文件夹,可以像下面这样做:
File file = new File(filePath);
if (file.getParentFile() != null) {
file.getParentFile().mkdirs();
}
mkdir
在 Java 中是幂等的。实现会检查目录是否存在,仅在不存在时才创建它。 - mwhs