我必须打印一个目录树(像树命令),示例:
.
+---A
| +---IMAGES
| +---BACKUP
+---ADOKS
| +---ROZDZIAL_2
| +---ROZDZIAL_3
| +---ROZDZIAL_4
+---AMSC2005
| +---AMSC2004
+---FCCS2005
| +---source
| +---TMP
+---LODZ2004
+---ZAKOPANE2004
+---DYDAKTYKA
| +---DYDAKTYKA_ISI
| | +---COLLS
| | | +---Q1
| | | +---Q2
| | | +---RAZEM
| | | +---RYSUNKI_COLL1
| | | +---RYSUNKI_COLL2
| | +---IMAGES
| | +---src
| | +---WYKLAD5
| +---DYDAKTYKA_PRG
| +---images
| +---POMOC
+---DYDAKTYKA_KST
| +---images
| +---src
+---DYDAKTYKA_WPR
+---images
+---src
我尝试使用以下代码:
private static void getInto(String p, int n) {
File path = new File(p);
File[] list = path.listFiles();
for (int i = 0; i < list.length; i++) {
if (list[i].isDirectorhowny()) {
for (int j = 0; j < n; j++)
if (WHAT HERE?)
System.out.print("| ");
else
System.out.print(" ");
System.out.println("+--" + list[i].getName().toString());
getInto(list[i].getPath(), n + 1);
}
}
}
我试了几个版本,但还是不行。这怎么做?如果是什么条件?我知道很简单,但我做不到。
从下面引用和修改树结构的fucntions:
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TreeNode<T> implements Iterable<TreeNode<T>> {
public T data;
public TreeNode<T> parent;
public List<TreeNode<T>> children;
public boolean isRoot() {
return parent == null;
}
public boolean isLeaf() {
return children.size() == 0;
}
private List<TreeNode<T>> elementsIndex;
public TreeNode(T data) {
this.data = data;
this.children = new LinkedList<TreeNode<T>>();
this.elementsIndex = new LinkedList<TreeNode<T>>();
this.elementsIndex.add(this);
}
public TreeNode<T> addChild(T child) {
TreeNode<T> childNode = new TreeNode<T>(child);
childNode.parent = this;
this.children.add(childNode);
this.registerChildForSearch(childNode);
return childNode;
}
public int getLevel() {
if (this.isRoot())
return 0;
else
return parent.getLevel() + 1;
}
private void registerChildForSearch(TreeNode<T> node) {
elementsIndex.add(node);
if (parent != null)
parent.registerChildForSearch(node);
}
public TreeNode<T> findTreeNode(Comparable<T> cmp) {
for (TreeNode<T> element : this.elementsIndex) {
T elData = element.data;
if (cmp.compareTo(elData) == 0)
return element;
}
return null;
}
@Override
public String toString() {
return data != null ? data.toString() : "[data null]";
}
@Override
public Iterator<TreeNode<T>> iterator() {
TreeNodeIter<T> iter = new TreeNodeIter<T>(this);
return iter;
}
public static TreeNode<File> createDirTree(File folder) {
if (!folder.isDirectory()) {
throw new IllegalArgumentException("folder is not a
Directory");
}
TreeNode<File> DirRoot = new TreeNode<File>(folder);
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
appendDirTree(file, DirRoot);
} else {
appendFile(file, DirRoot);
}
}
return DirRoot;
}
public static void appendDirTree(File folder, TreeNode<File> DirRoot)
{
DirRoot.addChild(folder);
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
appendDirTree(file,
DirRoot.children.get(DirRoot.children.size() - 1));
} else {
appendFile(file,
DirRoot.children.get(DirRoot.children.size() - 1));
}
}
}
public static void appendFile(File file, TreeNode<File> filenode) {
filenode.addChild(file);
}
public static String renderDirectoryTree(TreeNode<File> tree) {
List<StringBuilder> lines = renderDirectoryTreeLines(tree);
String newline = System.getProperty("line.separator");
StringBuilder sb = new StringBuilder(lines.size() * 20);
for (StringBuilder line : lines) {
sb.append(line);
sb.append(newline);
}
return sb.toString();
}
public static List<StringBuilder>
renderDirectoryTreeLines(TreeNode<File>
tree) {
List<StringBuilder> result = new LinkedList<>();
result.add(new StringBuilder().append(tree.data.getName()));
Iterator<TreeNode<File>> iterator = tree.children.iterator();
while (iterator.hasNext()) {
List<StringBuilder> subtree =
renderDirectoryTreeLines(iterator.next());
if (iterator.hasNext()) {
addSubtree(result, subtree);
} else {
addLastSubtree(result, subtree);
}
}
return result;
}
private static void addSubtree(List<StringBuilder> result,
List<StringBuilder> subtree) {
Iterator<StringBuilder> iterator = subtree.iterator();
//subtree generated by renderDirectoryTreeLines has at least one
line which is tree.getData()
result.add(iterator.next().insert(0, "├── "));
while (iterator.hasNext()) {
result.add(iterator.next().insert(0, "│ "));
}
}
private static void addLastSubtree(List<StringBuilder> result,
List<StringBuilder> subtree) {
Iterator<StringBuilder> iterator = subtree.iterator();
//subtree generated by renderDirectoryTreeLines has at least
one
line which is tree.getData()
result.add(iterator.next().insert(0, "└── "));
while (iterator.hasNext()) {
result.add(iterator.next().insert(0, " "));
}
}
public static void main(String[] args) {
File file = new File("./");
TreeNode<File> DirTree = createDirTree(file);
String result = renderDirectoryTree(DirTree);
System.out.println(result);
try {
File newTextFile = new File("./DirectoryTree.txt");
FileWriter fw = new FileWriter(newTextFile);
fw.write(result);
fw.close();
} catch (IOException iox) {
iox.printStackTrace();
}
}
}
使用此输出:
.
├── .DS_Store
├── .idea
│ ├── compiler.xml
│ ├── dictionaries
│ │ └── yankai01.xml
│ ├── encodings.xml
│ ├── misc.xml
│ └── workspace.xml
├── data_exploring.iml
├── pom.xml
├── src
│ ├── .DS_Store
│ ├── main
│ │ ├── .DS_Store
│ │ ├── java
│ │ │ ├── FileAssert.java
│ │ │ ├── HttpUtils.java
│ │ │ ├── QuerySaveToCsv.java
│ │ │ ├── SampleData.java
│ │ │ ├── SampleIterating.java
│ │ │ ├── SampleSearching.java
│ │ │ ├── TreeNode.java
│ │ │ └── TreeNodeIter.java
│ │ └── resources
│ └── test
│ └── java
└── target
├── classes
│ ├── FileAssert.class
│ ├── HttpUtils.class
│ ├── QuerySaveToCsv.class
│ ├── SampleData.class
│ ├── SampleIterating.class
│ ├── SampleSearching$1.class
│ ├── SampleSearching.class
│ ├── TreeNode.class
│ ├── TreeNodeIter$ProcessStages.class
│ └── TreeNodeIter.class
└── generated-sources
└── annotations
问题是,在这种代码状态下,文件和目录是这样打印的: 但是我需要先打开目录,然后打开文件:靠近。我试图找出问题出在哪里,但无济于事。我需要改变什么,在代码中的哪里得到想要的结果?
问题内容: 我可以从Bash脚本中调用任何Linux命令吗,它将以树的形式打印目录结构,例如, 问题答案: 这是您要寻找的树吗?它应该在大多数发行版中(可能是可选安装)。 样本来自维护者的网页。 您可以添加选项,其中由数字替换,以指定最大递归深度。 删除以显示文件。
打开和关闭目录 打开和关闭目录 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* * 程序清单:打开目录 * * 程序会创建一个操作文件的函数并导出到msh命令列表
我试图在远程服务器上使用pgAdmin中的psql控制台和sql转储文件恢复架构。我收到以下错误: 由于缺乏超级用户权限,我似乎无法打印目录列表。 是否有方法在psql控制台中标识或打印当前工作目录?默认目录是什么?
问题内容: 运行构建时成功,但是出现以下错误。我检查了整个地方,但似乎没有任何反应。在命令前使用该命令也无济于事。我正在使用Xcode 7.3,react-native-cli:0.2.0,react-native:0.24.1,节点v5.11.0。 问题答案: 我的问题实际上是我的构建处于发布模式而不是调试模式。结果,标识符指向了不存在的东西。我更改了构建类型,并最终正常工作。
使用 Photoshop,您可以打印任何兼容的 3D 模型,而无需担心 3D 打印机的限制。在准备打印时,Photoshop 会自动使 3D 模型防水。Photoshop 还会生成必要的支撑结构(支架和底座),以确保您的 3D 打印能够成功完成。 准备打印 3D 对象 选择“窗口”>“工作区”>“3D”以切换到 3D 工作区。 在 Photoshop 中打开 3D 模型。如果需要,请在打开 3D