Java 如何创建文件夹和文件的递归树?
我已经编写了一个程序,它接收一个文件作为第一个参数,并打印出一棵树,但我希望它不仅仅是检查输入文件/文件夹包含的子目录或文件Java 如何创建文件夹和文件的递归树?,java,Java,我已经编写了一个程序,它接收一个文件作为第一个参数,并打印出一棵树,但我希望它不仅仅是检查输入文件/文件夹包含的子目录或文件 import java.io.File; public class DN12 { public static void main(String[] args)throws Exception { File file = new File(args[0]); String fPath = file.getPath();
import java.io.File;
public class DN12 {
public static void main(String[] args)throws Exception {
File file = new File(args[0]);
String fPath = file.getPath();
System.out.println(fPath);
File[] paths = file.listFiles();
for(int i=0; i<paths.length; i++) {
String path2 = paths[i].getPath();
String[] path3 = path2.split("/");
System.out.println(" |___"+path3[path3.length-1]);
}
}
}
我的输出:
/p2/viri
|___sun.txt
|___tree
|___abc.txt
预期产出:
/p2/viri
|___sun.txt
|___tree
| |___.DS_Store
| |___dir1
| | |___dir11
| | | |___b.txt
| | |___a.txt
| |___src
| | |___predavanja11
| | | |___TestDrzava.java
| | | |___Dnevi.java
| | | |___Drzave.java
| | | |___Oseba.java
| | | |___Delitelji.java
| | | |___Drzava.java
| | | |___Meseci.java
| | | |___TestOseba.java
| |___dir2
| | |___dir21
| | |___dir22
| | | |___e.txt
| | |___d.txt
|___abc.txt
您需要定义一个递归方法。在javaish伪代码中
public static void listFiles(File f, int spaces) {
String s = <BUILD STRING OF SPACES>;
System.out.println(s + <YOUR_FILE_PRINT>);
// print current file
for (File f : f.listPaths()) {
// Do printing.
if (f.isDirectory()) {
listFiles(f, spaces + 2); // recursive call
}
}
}
publicstaticvoidlistfiles(文件f,int空格){
字符串s=;
系统输出打印项次(s+);
//打印当前文件
对于(文件f:f.listPaths()){
//做印刷。
if(f.isDirectory()){
listFiles(f,空格+2);//递归调用
}
}
}
递归方法需要有一个基本情况。在这种情况下,只有当它是一个目录并且堆栈总是展开时,我们才会递归。您可以这样做:
public static void main(String[] args) {
displayDirRecursively("sources", 0);
}
public static void displayDirRecursively(String directory, int depth) {
File file = new File(directory);
if (depth > 0) {
for (int i = 0; i < depth; i++) {
System.out.print(" ");
}
System.out.print("|__");
}
System.out.println(file.getName());
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
displayDirRecursively(files[i].getPath(), depth + 1);
}
}
}
publicstaticvoidmain(字符串[]args){
递归显示(“源”,0);
}
公共静态void递归显示(字符串目录,int-depth){
文件=新文件(目录);
如果(深度>0){
for(int i=0;i
创建可以递归调用的方法。可能相关:@Pshemo谢谢。我没有意识到它不可用。
public static void main(String[] args) {
displayDirRecursively("sources", 0);
}
public static void displayDirRecursively(String directory, int depth) {
File file = new File(directory);
if (depth > 0) {
for (int i = 0; i < depth; i++) {
System.out.print(" ");
}
System.out.print("|__");
}
System.out.println(file.getName());
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
displayDirRecursively(files[i].getPath(), depth + 1);
}
}
}
public class Main {
public static void main(String[] args) {
new Main().fooCursive(new File(System.getProperty("user.dir")));
}
public void fooCursive(File file) {
System.out.println(file.getName());
if (file.exists() && file.isDirectory()) {
Stream.of(file.listFiles()).forEach(subfile -> fooCursive(subfile));
}
}
}