Est-ce que quelqu'un sait comment utiliser Java pour créer des sous-répertoires basés sur les alphabets (a-z) de n niveaux?
/a
/a
/a
/b
/c
..
/b
/a
/b
..
..
/a
/b
/c
..
/b
/a
/a
/b
..
/b
/a
/b
..
..
/a
/b
..
..
/a
/a
/b
..
/b
/a
/b
..
..
/a
/b
..
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
crée de manière récurrente une arborescence de répertoires depth
- level basée sur une liste donnée de String
s, qui, dans le cas de main
, consiste en une liste de caractères de l'alphabet anglais.
Vous pouvez simplement utiliser la méthode mkdirs () de la classe Java.io.File
.
Exemple:
new File("C:\\Directory1\\Directory2").mkdirs();
Si cela ne vous dérange pas de faire appel à une API tierce, le paquet Apache Commons IO le fait directement pour vous. Jetez un coup d'oeil à FileUtils.ForceMkdir .
La licence Apache est adaptée au développement de logiciels commerciaux, c’est-à-dire qu’elle ne vous oblige pas à distribuer votre code source comme le fait la GPL. (Ce qui peut être une bonne ou une mauvaise chose, selon votre point de vue).
Groovy a la classe FileTreeBuilder pour cela. Le problème est que sa description est faible et que l'exemple comporte une erreur. Donc, je n'ai vu aucun code l'utiliser. Comme je l'ai constaté, cela ne fonctionnera pas correctement sans la définition du champ baseDir. Peut-être que cela résoudra vos problèmes.
def tree = new FileTreeBuilder()
tree.src {
main {
groovy {
'Foo.groovy'('println "Hello"')
}
}
test {
groovy {
'FooTest.groovy'('class FooTest extends GroovyTestCase {}')
}
}
}
C'est l'exemple de docs. Mais cela ne fonctionnera que si vous définissez en quelque sorte le baseDir. Par exemple, en passant par le paramètre constructeur.
Je voudrais écrire une petite méthode utilitaire qui prend la lettre de départ et la lettre de fin ainsi que la profondeur souhaitée en tant que paramètres. Cette méthode s'appelle récursivement jusqu'à la fin:
private static void createAlphabetFolders(File parent, int start, int end, int deepth){
if(deepth <= 0){
return;
}
for (int i=start; i < end; i++){
// create the folder
String folderName = "" + ((char) i);
File folder = new File(parent, folderName);
System.out.println("creating: " + folder.getPath());
folder.mkdirs();
// call recursively
createAlphabetFolders(folder, start, end, deepth-1);
}
}
On l'appellerait comme ça:
createAlphabetFolders(new File("abctest"), 'A', 'E', 5);
Apache commons aborde la plupart de ces problèmes. Essayer -
org.Apache.commons.io.FileUtils.forceMkdir (répertoire);
Code Scala:
def makePathRecursive(path: String) = {
import Java.io.File
import scala.util.{Try, Failure, Success}
val pathObj = new File(path)
pathObj.exists match {
case true => // do nothing
case false => Try(pathObj.mkdirs) match {
case Success(_) => // it worked
case Failure(e) => // maybe created meanwhile by another thread
pathObj.exists match {
case false => throw new Exception(e)
case _ =>
}
}
}
}