new File("/path/directory").mkdirs();
这里的“目录”是您要创建/存在的目录的名称。
大约 7 年后,我会将其更新为 Bozho 建议的更好方法。
File theDir = new File("/path/directory");
if (!theDir.exists()){
theDir.mkdirs();
}
if(!theDir.exists())
和 theDir.mkdir()
之间,状态可能发生了变化,也可能在 not 创建目录(因为 exists
返回 true
)和需要它之间发生变化。方法 exists
的结果绝不应该用于决定是否创建目录。只需调用mkdir
,如果已经存在则不会抛出异常。
mkdir
和需要目录之间的状态不能改变吗?我假设您的意思是其他一些进程删除了该目录。
mkdirs
实现,首先调用的是 if (exists()) { return false; }
。实现本身首先检查目录是否已经存在,所以这个答案的唯一错误可能是检查条件 2x。没有你想象的那么糟糕。
Files
中的方法,就像 Benoit Blanchon 最近的回答一样。 (这个答案似乎是在 Java 7 之前编写的。)
对于 Java 7,您可以使用 Files.createDirectories()
。
例如:
Files.createDirectories(Paths.get("/path/to/directory"));
Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
directory.toPath()
。
你可以试试FileUtils#forceMkdir
FileUtils.forceMkdir("/path/directory");
这个library有很多有用的功能。
mkdir 与 mkdirs
如果要创建单个目录,请使用 mkdir
new File("/path/directory").mkdir();
如果要创建文件夹结构的层次结构,请使用 mkdirs
new File("/path/directory").mkdirs();
创建一个目录。 new File("C:\\Directory1").mkdir();创建一个名为“Directory2”的目录及其所有子目录“Sub2”和“Sub-Sub2”。新文件("C:\\Directory2\\Sub2\\Sub-Sub2").mkdirs()
来源:这个完美的 tutorial ,您也可以找到一个使用示例。
对于 Java 7 及更高版本:
Path path = Paths.get("/your/path/string");
Files.createDirectories(path);
在创建 from createDirectories javadocs 之前似乎没有必要检查目录或文件是否存在:
通过首先创建所有不存在的父目录来创建目录。与 createDirectory 方法不同,如果由于目录已存在而无法创建目录,则不会引发异常。 attrs 参数是可选的文件属性,用于在创建不存在的目录时自动设置。每个文件属性都由其名称标识。如果数组中包含多个同名属性,则忽略除最后一次出现的所有属性。如果此方法失败,则它可能会在创建一些(但不是全部)父目录后这样做。
下面的方法应该做你想做的事,只要确保你正在检查 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();
}
}
干净整洁:
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!");
}
}
}
}
虽然这个问题已经回答了。我想补充一些额外的内容,即如果存在一个具有您尝试创建的目录名称的文件,那么它应该会提示错误。对于未来的访客。
public static void makeDir()
{
File directory = new File(" dirname ");
if (directory.exists() && directory.isFile())
{
System.out.println("The dir with name could not be" +
" created as it is a normal file");
}
else
{
try
{
if (!directory.exists())
{
directory.mkdir();
}
String username = System.getProperty("user.name");
String filename = " path/" + username + ".txt"; //extension if you need one
}
catch (IOException e)
{
System.out.println("prompt for error");
}
}
}
只是想向所有调用 File.mkdir()
或 File.mkdirs()
的人指出要小心 File
对象是目录而不是文件。例如,如果您为路径 /dir1/dir2/file.txt
调用 mkdirs()
,它将创建一个名为 file.txt
的 文件夹,这可能不是您想要的。如果您正在创建一个新文件并且还想自动创建父文件夹,您可以执行以下操作:
File file = new File(filePath);
if (file.getParentFile() != null) {
file.getParentFile().mkdirs();
}
这种方式对我来说是一个或多个目录或它们:需要导入 java.io.File; /*输入下面的代码添加目录dir1或检查是否存在dir1,如果不存在,则创建它,与dir2和dir3相同*/
File filed = new File("C:\\dir1");
if(!filed.exists()){ if(filed.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist"); }
File filel = new File("C:\\dir1\\dir2");
if(!filel.exists()){ if(filel.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist"); }
File filet = new File("C:\\dir1\\dir2\\dir3");
if(!filet.exists()){ if(filet.mkdir()){ System.out.println("directory is created"); }} else{ System.out.println("directory exist"); }
如果你想确定它的创建,那么这个:
final String path = "target/logs/";
final File logsDir = new File(path);
final boolean logsDirCreated = logsDir.mkdir();
if (!logsDirCreated) {
final boolean logsDirExists = logsDir.exists();
assertThat(logsDirExists).isTrue();
}
因为 mkDir()
返回一个布尔值,如果您不使用该变量,findbugs 会为它哭泣。而且也不好看...
mkDir()
仅在 mkDir()
创建它时返回 true。如果目录存在,则返回 false,因此要验证您创建的目录,仅在 mkDir()
返回 false 时调用 exists()
。
assertThat()
将检查结果并在 exists()
返回 false 时失败。 ofc 你可以使用其他东西来处理未创建的目录。
此功能允许您在用户主目录上创建目录。
private static void createDirectory(final String directoryName) {
final File homeDirectory = new File(System.getProperty("user.home"));
final File newDirectory = new File(homeDirectory, directoryName);
if(!newDirectory.exists()) {
boolean result = newDirectory.mkdir();
if(result) {
System.out.println("The directory is created !");
}
} else {
System.out.println("The directory already exist");
}
}
public class Test1 {
public static void main(String[] args)
{
String path = System.getProperty("user.home");
File dir=new File(path+"/new folder");
if(dir.exists()){
System.out.println("A folder with name 'new folder' is already exist in the path "+path);
}else{
dir.mkdir();
}
}
}
不定期副业成功案例分享
Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise