黑马程序员技术交流社区
标题:
关于遍历文件夹路径的文件名的问题.
[打印本页]
作者:
tc4892998
时间:
2014-6-5 13:36
标题:
关于遍历文件夹路径的文件名的问题.
题目要求是这样的,
6,从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印, 例如:
路径
文件夹A
文件夹B
文件夹C
文件D
文件C
文件B1
文件B2
文件A1
文件A2
我的代码如下:
package cn.itcast.test;
import java.io.File;
import java.util.Scanner;
/*
* 6,从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印, 例如:
*/
public class PrintFilesName {
public static void main(String[] args) {
File file = checkPath();
printName(file);
}
@SuppressWarnings("resource")
public static File checkPath() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要打印的路径");
while (true) {
String str = sc.nextLine();
File file = new File(str);
if (!file.exists()) {
System.out.println("您输入的路径不存在,请重新输入文件夹路径:");
} else if (file.isFile()) {
System.out.println("您输入的是文件路径,请重新输入文件夹路径:");
} else {
System.out.println(file.getName());
return file;
}
}
}
/*
* 定义个计数器count,方便循环打印"\t"制表符,如果file2为文件夹,则count++
*/
public static int count = 1;
public static void printName(File file) {
File[] files = file.listFiles();
for (File file2 : files) {
if (file2.isDirectory() && file2.listFiles().length != 0) {
for (int j = 0; j < count; j++) {
System.out.print("\t");
}
count++;
System.out.println(file2.getName());
printName(file2);
} else if (file2.isFile()) {
for (int j = 0; j < count; j++) {
System.out.print("\t");
}
count--;
System.out.println(file2.getName());
}
}
}
}
为何实现不了需求呢?望指点.
作者:
心灵的微幸福
时间:
2014-6-5 16:03
import java.io.File;
import java.util.Scanner;
/*
* 6,从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印, 例如:
*/
public class PrintFilesName {
public static void main(String[] args) {
File file = checkPath();
int count=0;
printName(file,count);
}
@SuppressWarnings("resource")
public static File checkPath() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要打印的路径");
while (true) {
String str = sc.nextLine();
File file = new File(str);
if (!file.exists()) {
System.out.println("您输入的路径不存在,请重新输入文件夹路径:");
} else if (file.isFile()) {
System.out.println("您输入的是文件路径,请重新输入文件夹路径:");
} else {
System.out.println(file.getName());
return file;
}
}
}
/*
* 定义个计数器count,方便循环打印"\t"制表符,如果file2为文件夹,则count++
*/
public static void printName(File file,int count) {
count++;
File[] files = file.listFiles();
for (File file2 : files) {
if (file2.isDirectory() && file2.listFiles().length != 0) {
for (int j = 0; j < count; j++) {
System.out.print("\t");
}
System.out.println(file2.getName());
printName(file2,count);
} else if (file2.isFile()) {
for (int j = 0; j < count; j++) {
System.out.print("\t");
}
System.out.println(file2.getName());
}
}
}
}
这样就可以了,将计数的变量作为方法的参数,遇到一级目录就往里传一个新的level值。
作者:
tc4892998
时间:
2014-6-5 23:16
心灵的微幸福 发表于 2014-6-5 16:03
import java.io.File;
import java.util.Scanner;
/*
嗯,我问了下老师,他说要传递2个参数,我改了下也写出来了.
这是那个printName的方法
public static void printName(File file, int x) {
String str = "";
File[] files = file.listFiles();
for (int i = 0; i < x; i++) {
str += "\t";
}
for (File file2 : files) {
System.out.println(str + file2.getName());
if (file2.isDirectory()) {
printName(file2, x + 1);
}
}
}
作者:
钟翠翠
时间:
2014-7-28 14:14
学习下,非常赞!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2