Recursively create directory

前端 未结 10 588
萌比男神i
萌比男神i 2020-12-30 23:20

Does anyone know how to use Java to create sub-directories based on the alphabets (a-z) that is n levels deep?

 /a
    /a
        /a
        /b
        /c
           


        
相关标签:
10条回答
  • 2020-12-30 23:28

    Since Java 7, java.nio is preferred

    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    ...
    
    Files.createDirectories(Paths.get("a/b/c"));
    
    0 讨论(0)
  • 2020-12-30 23:34
    public static void main(String[] args) {
      File root = new File("C:\\SO");
      List<String> alphabet = new ArrayList<String>();
      for (int i = 0; i < 26; i++) {
        alphabet.add(String.valueOf((char)('a' + i)));
      }
    
      final int depth = 3;
      mkDirs(root, alphabet, depth);
    }
    
    public static void mkDirs(File root, List<String> dirs, int depth) {
      if (depth == 0) return;
      for (String s : dirs) {
        File subdir = new File(root, s);
        subdir.mkdir();
        mkDirs(subdir, dirs, depth - 1);
      }
    }
    

    mkDirs recusively creates a depth-level directory tree based on a given list of Strings, which, in the case of main, consists of a list of characters in the English alphabet.

    0 讨论(0)
  • 2020-12-30 23:34

    You could use three loops over characters a-z like so:

    import java.io.*;
    
    public class FileCreate {
    
        public static void main(String[] args) throws Exception {
            char trunkDirectory = 'a';
            char branchDirectory = 'a';
            char leaf = 'a';
    
            while (trunkDirectory != '{') {
                while (branchDirectory != '{') {
                    while (leaf != '{') {
                        System.out.println(trunkDirectory + "/" + branchDirectory + "/" + leaf++);
                    }
                    leaf = 'a';
                    branchDirectory++;
                }
                branchDirectory = 'a';
                trunkDirectory++;
            }
    
        }
    }
    

    This simply outputs the paths to the console. You could use File#mkdirs() to create a recursive directory structure or create the directories in each intermediate part of the nested loop. I'll leave that for you to finish.

    0 讨论(0)
  • 2020-12-30 23:35

    You can simply use the mkdirs() method of java.io.File class.

    Example:

    new File("C:\\Directory1\\Directory2").mkdirs();
    
    0 讨论(0)
  • 2020-12-30 23:43

    If you're using mkdirs() (as suggested by @Zhile Zou) and your File object is a file and not a directory, you can do the following:

    // Create the directory structure
    file.getParentFile().mkdirs();
    
    // Create the file
    file.createNewFile();
    

    If you simply do file.mkdirs() it will create a folder with the name of the file.

    0 讨论(0)
  • 2020-12-30 23:44

    Apache commons addresses most of these. Try -

    org.apache.commons.io.FileUtils.forceMkdir(directory);

    0 讨论(0)
提交回复
热议问题