打印目录,如树命令 [英] print directory like tree command

查看:172
本文介绍了打印目录,如树命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须打印目录树。
我有以下代码:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆