面试题-程序题-Java递归实现遍历文件目录(所有文件夹和子文件)

Java递归实现遍历文件目录(所有文件夹和子文件)


测试目录(树状图)

F:

|-TestDialog

|-a

| |-a1

| |-a2

| |-a3

|

|-b

| |-b1

| |-b2

| |-b3.txt

|-c

| |-c1.txt

| |-c2.txt

| |-c3


以下3个是本人整理的3个不同的答案(第三个是全部都显示出来)


第一个:(显示原有有子文件的路径)(空文件夹不显示)

public class TestDialog {
	public static void main(String[] args){
		//创建File实例,参数为c盘,File.separator 为分分隔符(分隔在windows下是)\,在linux下是/,调用这个方法可以自动调整
		File file = new File("F:"+File.separator+"TestDialog");
		print(file);
	}
	
	private static void print(File file){
		//传入的文件夹是否存在
		if(file.exists() && file.isDirectory()&&file != null){
			//通过File类的listFiles方法获取文件夹中所有文件的全路径
			File[] files = file.listFiles();
			//如果文件夹不为空
			if(files !=null && files.length>0){
				//遍历该文件夹下的所有内容
				for(int i=0;i<files.length;i++){
					//如果文件夹
					if(files[i].isDirectory()){
						//再次调用自己(递归)
						print(files[i]);
					}else{
						//输出全路径(JVM会自动调用Object.toStrings)
						System.out.println(files[i]);
					}
				}
			}
		}
	}
}


显示效果:
F:\TestDialog\b\b3.txt
F:\TestDialog\c\c1.txt
F:\TestDialog\c\c2.txt


第二个是空文件夹都包括了用<>表示文件夹

package testhulian;

import java.io.File;

public class TestDialog3 {
	public void print1(File mFile, int mlevel){
		for(int i=0;i<mlevel;i++){
			System.out.print("\t");
		}
		if(mFile.isDirectory()){
			System.out.println("<"+getPath(mFile)+">");
			String[] str = mFile.list();
			for(int i=0;i<str.length;i++){
				print1(new File(mFile.getPath()+"\\"+str[i]),mlevel+1);
			}
		}else{
			System.out.println(getPath(mFile));
		}
	}
	public String getPath(File mFile){
		String fullPath = mFile.getPath();
		String[]str = fullPath.split("\\\\");
		return str[str.length -1];
	}
	
	public static void main(String[] args) {
		TestDialog3 demo = new TestDialog3();
		File rootFile = new File("F:\\TestDialog");
		demo.print1(rootFile, 0);
	}
}




显示效果:
<TestDialog>
<a>
<a1>
<a2>
<a3>
<b>
<b1>
<b2>
b3.txt
<c>
c1.txt
c2.txt
<c3>


第三个是全部文件及子文件都以树图形式显示出来

package testhulian;

import java.io.File;

public class TestDialog4 { 
	public static void main(String[] args) { 
	File f = new File("F:\\TestDialog"); 
	System.out.println(f.getName()); 
	tree(f, 1); 

	} 

	// 递归方法 
	private static void tree(File f, int level) { 
	String preStr = ""; 
	for (int i = 0; i < level; i++) { 
	preStr += "-"; 
	} 

	File[] childs = f.listFiles(); //listFiles()返回目录下的所有文件. 
	for (int i = 0; i < childs.length; i++) { 
	System.out.println(preStr + childs[i].getName()); 
	if (childs[i].isDirectory()) { //isDirectory()判断是否为目录 
	tree(childs[i], level + 1); 
	} 
	} 
	} 
	}

显示效果:

TestDialog
-a
--a1
--a2
--a3
-b
--b1
--b2
--b3.txt
-c
--c1.txt
--c2.txt
--c3


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值