打印目录,如树命令 [英] print directory like tree command
本文介绍了打印目录,如树命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我必须打印目录树。
我有以下代码:
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;
}
此输出:
example
├──a
└──b
│ └──b1
│ │ ├──b11
│ │ │ └──b111
│ │ └──b12
│ │ │ ├──b121
│ │ │ └──b122
│ │ │ │ └──b1221
我没有设法删除无用的深线。怎么做?
我的回答是:我如何保持连线(与cmd的树命令一样多)?
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)?"
推荐答案
import java.io.File;
public class FileAssert {
/**
* Pretty print the directory tree and its file names.
*
* @param folder
* must be a folder.
* @return
*/
public static String printDirectoryTree(File folder) {
if (!folder.isDirectory()) {
throw new IllegalArgumentException("folder is not a Directory");
}
int indent = 0;
StringBuilder sb = new StringBuilder();
printDirectoryTree(folder, indent, sb);
return sb.toString();
}
private static void printDirectoryTree(File folder, int indent,
StringBuilder sb) {
if (!folder.isDirectory()) {
throw new IllegalArgumentException("folder is not a Directory");
}
sb.append(getIndentString(indent));
sb.append("+--");
sb.append(folder.getName());
sb.append("/");
sb.append("\n");
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
printDirectoryTree(file, indent + 1, sb);
} else {
printFile(file, indent + 1, sb);
}
}
}
private static void printFile(File file, int indent, StringBuilder sb) {
sb.append(getIndentString(indent));
sb.append("+--");
sb.append(file.getName());
sb.append("\n");
}
private static String getIndentString(int indent) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < indent; i++) {
sb.append("| ");
}
return sb.toString();
}
}
这篇关于打印目录,如树命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文