Discuss / Java / 用的嵌套for循环。没有用到递归,最开始尝试递推,发现输出的格式不符合要求,可能需要动到函数外或函数本身

用的嵌套for循环。没有用到递归,最开始尝试递推,发现输出的格式不符合要求,可能需要动到函数外或函数本身

Topic source

Best of Me

#1 Created at ... [Delete] [Delete and Lock User]

// TODO: 递归打印所有文件和子文件夹的内容

File[] fs = dir.listFiles();

if (fs != null) {// 进入一级目录

for (File f : fs) {// 遍历一级目录,子目录增加上一级目录的2个缩进

for (String s = "";; s += " ") {

if (f.listFiles() != null) {

System.out.println(s + f.getName() + File.separator);

for (File subf : f.listFiles()) {// 下级文件夹赋值f

f = subf;

}

} else {

System.out.println(s + f.getName());

break;

}

}

}

}

Best of Me

#2 Created at ... [Delete] [Delete and Lock User]

吞空格了,这里有两个空格s += "  "

Best of Me

#3 Created at ... [Delete] [Delete and Lock User]

使用递归,优化了代码

public class Main4 {



	public static void main(String[] args) throws IOException {

		File currentDir = new File(".");

		listDir(currentDir.getCanonicalFile());

	}



//如果不指定参数,则使用当前目录,如果指定参数,则使用指定目录。

	static void listDir(File dir) {

		// TODO: 递归打印所有文件和子文件夹的内容

		File[] files = dir.listFiles();

		System.out.println(dir.getName() + File.separator);

			for (File file : files) {

				StringBuilder space = new StringBuilder(1024);

				space.append("  ");

				dirTools(file, space);

			}

	}



	public static void dirTools(File file, StringBuilder space) {

		if (file.isDirectory()) {// 目录

			System.out.println(space + file.getName() + File.separator);

			for (File subFile : file.listFiles()) {

				space.append("  ");

				dirTools(subFile, space);

				space.delete(space.length() - 2, space.length());

			}

		} else {// 文件

			System.out.println(space + file.getName());

		}

	}


  • 1

Reply