I have to print a directory tree. I have the following code:
public static void main(String[] args) throws Exception
{
File root = new File("C:\\Users\\User\\Desktop\\example");
if (!root.isDirectory())
{
throw new IllegalArgumentException("Invalid directory: " + root.getName());
}
int level = 0;
System.out.println(renderFolder(root, level, new StringBuilder(), false));
}
private static StringBuilder renderFolder(File folder, int level, StringBuilder sb, boolean isLast)
{
indent(sb, level, isLast).append(folder.getName()).append("\n");
File[] objects = folder.listFiles();
for (int i = 0; i < objects.length; i++)
{
boolean last = ((i + 1) == objects.length);
if (objects[i].isDirectory())
{
renderFolder(objects[i], level + 1, sb, last);
}
}
return sb;
}
private static StringBuilder indent(StringBuilder sb, int level, boolean isLast)
{
for (int i = 1; i < level; i++)
{
sb.append("\u2502 ");
}
if (level > 0)
{
sb.append(isLast
? "\u2514\u2500\u2500"
: "\u251c\u2500\u2500");
}
return sb;
}
with this output:
example
├──a
└──b
│ └──b1
│ │ ├──b11
│ │ │ └──b111
│ │ └──b12
│ │ │ ├──b121
│ │ │ └──b122
│ │ │ │ └──b1221
I didn't manage to remove the useless deep lines. How to do this?
Also my answer is: "How can I keep lines connected(as much as the cmd's tree command)?"