commit 8cbc2e628dd5adf176b9a1aecaf9f7d1f9259e5c Author: Jesus Date: Tue Sep 27 16:25:08 2022 +0200 Project Finished diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..57bca72 --- /dev/null +++ b/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..1a3bd7b --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + tree-cmd-java + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/bin/com/jesuspinar/main/Main$1.class b/bin/com/jesuspinar/main/Main$1.class new file mode 100644 index 0000000..bb5c4be Binary files /dev/null and b/bin/com/jesuspinar/main/Main$1.class differ diff --git a/bin/com/jesuspinar/main/Main.class b/bin/com/jesuspinar/main/Main.class new file mode 100644 index 0000000..8ea71d8 Binary files /dev/null and b/bin/com/jesuspinar/main/Main.class differ diff --git a/src/com/jesuspinar/main/Main.java b/src/com/jesuspinar/main/Main.java new file mode 100644 index 0000000..4b471a1 --- /dev/null +++ b/src/com/jesuspinar/main/Main.java @@ -0,0 +1,70 @@ +package com.jesuspinar.main; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class Main { + + public static void main(String[] args) { + File folder = new File("."); + StringBuilder sb = renderFolder(folder); + System.out.println(sb.toString()); + } + + private static StringBuilder renderFolder(File folder) { + return renderFolder(folder, 0, new StringBuilder(), false, new ArrayList<>()); + } + + private static StringBuilder renderFolder(File folder, int level, StringBuilder sb, + boolean isLast, List hierarchyTree) { + + indent(sb, level, isLast, hierarchyTree).append(folder.getName()).append("\n"); + + File[] objects = folder.listFiles((FilenameFilter) new FilenameFilter() { + @Override + public boolean accept(File current, String name) { + return new File(current, name).isDirectory(); + } + }); + + for (int i = 0; i < objects.length; i++) { + boolean last = ((i + 1) == objects.length); + + // esto significa que la carpeta actual todavía tendrá que imprimir sub + //carpetas a este nivel, entonces necesitamos continuar imprimiendo | + hierarchyTree.add(i != objects.length - 1); + renderFolder(objects[i], level + 1, sb, last, hierarchyTree); + + // hace saltar el último valor al volver de un nivel inferior a un nivel superior + hierarchyTree.remove(hierarchyTree.size() - 1); + } + return sb; + } + + private static StringBuilder indent(StringBuilder sb, int level, + boolean isLast, List hierarchyTree) { + + String indentContent = "\u2502 "; + for (int i = 0; i < hierarchyTree.size() - 1; ++i) { + // determina si necesitamos imprimir | en este nivel para mostrar la estructura del árbol + // es decir, si esta carpeta tiene una carpeta hermana que se va a imprimir más tarde + if (hierarchyTree.get(i)) { + sb.append(indentContent); + } else { + sb.append(" "); + } + } + + if (level > 0) { + sb.append(isLast + ? "\u2514\u2500\u2500" + : "\u251c\u2500\u2500").append(" "); + } + + return sb; + } + +}