A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tc4892998 中级黑马   /  2014-6-5 13:36  /  2462 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目要求是这样的,
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());
                        }
                }
        }
}


为何实现不了需求呢?望指点.

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

3 个回复

倒序浏览
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值。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
心灵的微幸福 发表于 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);
                        }
                }

        }
回复 使用道具 举报
学习下,非常赞!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马