曾经面试的一个关于文件操作的上机题

问题描述

记得是一个游戏公司面试,然后人力面试后是机试,其中一道题目就是让遍历出一个目录下面的所有子目录以及文件。并且按照一定的缩进打印出来,当时做了有一大会没有做出来。最后面试结果也可想而知。今天看《java核心技术 卷II 》 上来就是流与文件,这也让我想起了曾经的这个经历。

具体实现

有了上面的经历,所以自己就想来实现一个这个功能,在没有查阅资料的前提下经过一段时间的调试,调试出来了如下程序,经过测试是满足当时问题的需求的。代码如下:

import java.io.File;
import java.io.IOException;

/**
 * <p>
 * 概要信息:遍历指定目录下的所有目录和文件,并按照一个的缩进打印
 * </p>
 *
 * <p>
 * 版权: ©2016  版权所有
 * </p>
 * 
 * @author qi
 * @version %I%, %G%
 */
public class Test {
    //统计层级初始值
    private static int level = 0;

    /**
     * 
     * <p>
     * 行为描述:测试方法正确性
     * </p>
     * @param
     */
    public static void main(String[] args) throws IOException {
        File file1 = new File("E:\\IdeWorkSpace\\eclipse\\Algorithm");//目录请替换为自己对应的目录
        System.out.println(file1.getCanonicalPath());
        System.out.println(file1.exists());
        printChildrenPath(file1, 0);
    }

    /**
     * 
     * <p>
     * 行为描述:
     * </p>
     * @param dir(源目录) defaultLevel(源目录所在层级)
     */
    public static void printChildrenPath(File dir, int defaultLevel) {
        //内部统计层级初始值,解决统一目录下的目录与文件缩进不一致问题
        int innerLevel = 0;
        level = defaultLevel;
        if (dir.isDirectory()) {
            level++;
            innerLevel = level;
            System.out.println("dir:" + dir.getName());
            for (File child : dir.listFiles()) {
                printSeparator(innerLevel);
                printChildrenPath(child, innerLevel);
            }
        } else {
            System.out.println("file:" + dir.getName());
        }
    }

    /**
     * 
     * <p>
     * 行为描述:根据所在层级进行相应的缩进,本示例以每次缩进两个空格为准
     * </p>
     * @param level(所在层级)
     */
    public static void printSeparator(int level) {
        for (int i = 0; i < level; i++) {
            System.out.print("  ");
        }
    }
}

运行结果如下:
这里写图片描述
指定文件根目录截图如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值