黑马程序员技术交流社区

标题: 关于遍历文件夹路径的文件名的问题. [打印本页]

作者: 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