gpt4 book ai didi

java - 打印目录树

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:03:25 24 4
gpt4 key购买 nike

我必须打印目录树(如树命令),示例:

 .
+---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);
}
}
}

我试了几个版本,还是不行。这该怎么做? If应该放什么条件?我知道这很简单,但我做不到。

最佳答案

我就是这样做的。

代码

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();
}
}

结果

+--folder1/
| +--a.txt
| +--folder2/
| | +--b1.txt
| | +--b2.txt
| | +--b3.txt
| | +--folder3/
| +--folder4/

单元测试

import static org.junit.Assert.*;

import java.io.File;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class FileAssertTest {

@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private File folder1;

@Before
public void setUp() {
folder1 = temporaryFolder.newFolder("folder1");
}

@Test
public void testPrintDirectoryTreeWhenFolderIsEmpty() {
// Invoke
String actual = FileAssert.printDirectoryTree(folder1);
// Verify
assertEquals("+--folder1/\n", actual);
}

private static final String EXPECTED_FCOF = "" + "+--folder1/\n"
+ "| +--a.txt\n";

@Test
public void testPrintDirectoryTreeWhenFolderContainsOneFile()
throws Exception {
// Setup
File aFile = new File(folder1, "a.txt");
assertTrue(aFile.createNewFile());
// Invoke
String actual = FileAssert.printDirectoryTree(folder1);
// Verify
assertEquals(EXPECTED_FCOF, actual);
}

private static final String EXPECTED_COMPLEX = "+--folder1/\n"
+ "| +--a.txt\n" + "| +--folder2/\n" + "| | +--b1.txt\n"
+ "| | +--b2.txt\n" + "| | +--b3.txt\n" + "| | +--folder3/\n"
+ "| +--folder4/\n";

@Test
public void testPrintDirectoryTreeComplex() throws Exception {
// Setup
File aFile = new File(folder1, "a.txt");
assertTrue(aFile.createNewFile());
File folder2 = new File(folder1, "folder2");
assertTrue(folder2.mkdir());
File b1File = new File(folder2, "b1.txt");
assertTrue(b1File.createNewFile());
File b2File = new File(folder2, "b2.txt");
assertTrue(b2File.createNewFile());
File folder3 = new File(folder2, "folder3");
assertTrue(folder3.mkdir());
File b3File = new File(folder2, "b3.txt");
assertTrue(b3File.createNewFile());
File folder4 = new File(folder1, "folder4");
assertTrue(folder4.mkdir());

// Invoke
String actual = FileAssert.printDirectoryTree(folder1);
// Verify
assertEquals(EXPECTED_COMPLEX, actual);
}

}

关于java - 打印目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com