美文网首页
使用 java 打印文件树状目录

使用 java 打印文件树状目录

作者: 奔跑的笤帚把子 | 来源:发表于2018-10-31 16:20 被阅读0次

根据 《Think in java》 io 章的前两节,简单写出来的代码, 还有不完善的地方,需要修改。

import java.util.regex.*;
import java.io.*;
import java.util.*;

public class Directory {
    private File currentDirectoryFile;
    private LinkedList<File> beforeDirectories = new LinkedList<File>();

    public Directory(String start) {
        currentDirectoryFile = new File(start);
        beforeDirectories.add(currentDirectoryFile);
    }

    class FileComparator implements Comparator<File> {
        public int compare(File one, File two) {
            String oneString = one.getName();
            String twoString = two.getName();
            return oneString.compareTo(twoString);
        }
    }

    private class TreeInfo {
        private List<File> files = new ArrayList<File>();
        private List<File> dirs = new ArrayList<File>();
    }

    private TreeInfo addAll() {
        // 将 currentDirectoryFile 此目录中的所有文件与文件夹提取保存,并分别按照从小到大的顺序排列。
        TreeInfo tInfo = new TreeInfo();
        File[] allFiles = currentDirectoryFile.listFiles();
        Arrays.sort(allFiles, new FileComparator());
        for(File elem: allFiles) {
            if(elem.isFile())
                tInfo.files.add(elem);
            else
                tInfo.dirs.add(elem);
        }
        return tInfo;
    }

    private String filesPrint(File f) {
        String s = "";
        for(int i = 0; i < beforeDirectories.size(); i++) {
            int spaceLength;
            if (i == 0) {
                spaceLength = beforeDirectories.get(i).getAbsolutePath().length();
            } else {
                spaceLength = beforeDirectories.get(i).getName().length() + 2;
            }
            s = String.format(s + "%" + spaceLength + "s|", "");
        }
        s += "_ %s";
        return String.format(s, f.getName());
    }

    private void printTreeInfoInSingleDirectory() {
        TreeInfo tInfo = addAll();
        for(File f: tInfo.files) {
            System.out.println(filesPrint(f));
        }
        for(File d: tInfo.dirs) {
            System.out.println(filesPrint(d));
            beforeDirectories.addLast(d);
            currentDirectoryFile = d;
            printTreeInfoInSingleDirectory();
            beforeDirectories.removeLast();
        }
    }

    public void walk() {
        System.out.println(currentDirectoryFile.getAbsolutePath());
        printTreeInfoInSingleDirectory();
    }

    public static void main(String[] args) {
        Directory t = new Directory("G:\\react\\node_modules\\redux");
        t.walk();
    }
}

得到结果如下:

G:\react\node_modules\redux
                           |_ CHANGELOG.md
                           |_ LICENSE.md
                           |_ README.md
                           |_ index.d.ts
                           |_ package.json
                           |_ dist
                           |      |_ redux.js
                           |      |_ redux.min.js
                           |_ es
                           |    |_ redux.js
                           |_ lib
                           |     |_ redux.js
                           |_ node_modules
                           |              |_ .bin
                           |              |      |_ loose-envify
                           |              |      |_ loose-envify.cmd
                           |_ src
                           |     |_ applyMiddleware.js
                           |     |_ bindActionCreators.js
                           |     |_ combineReducers.js
                           |     |_ compose.js
                           |     |_ createStore.js
                           |     |_ index.js
                           |     |_ utils
                           |     |       |_ actionTypes.js
                           |     |       |_ isPlainObject.js
                           |     |       |_ warning.js

Process finished with exit code 0

相关文章

  • 使用 java 打印文件树状目录

    根据 《Think in java》 io 章的前两节,简单写出来的代码, 还有不完善的地方,需要修改。 得到结果如下:

  • 2018-04-25 300集Java

    file类的使用(读写文件 通过他操作文件或目录) 125课常用类_file类_打印目录树状结构_递归算法 128...

  • tree [options]

    列出目录树状图 options -a 列出所有文件-d 仅列出目录-i 不打印出树状结构符号-C/-n 打开/关闭...

  • linux 技术学习笔记(转载)

    目录文件结构: 树状目录结构: 目录结构的解释: /bin: bin是Binnary的缩写,这个目录存放着最常使用...

  • Java实现文件目录操作书目录

    Java实现文件目录操作之使用IO和NIO创建目录 Java实现文件目录操作之递归遍历目录和文件 Java实现文件...

  • maven编译问题

    1.当java文件目录不是传统的src/main/java(此时java目录为java文件的根目录)时候,需要使用...

  • 按层次打印文件目录结构

    import java.io.File; /** * 按层次打印文件目录结构 * @author gxl * */...

  • linux目录与文件结构

    树状目录结构: 系统启动必须: /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。 /...

  • Qt官方示例-目录视图

    该示例显示了本地文件系统的树状视图。它使用QFileSystemModel类提供文件和目录信息。   声明mode...

  • Windows 命令行操作(持续更新)

    生成树状结构文件 进入目录文件夹下使用 tree /F > 命令,后面加上生成的文件名称 test.txt ima...

网友评论

      本文标题:使用 java 打印文件树状目录

      本文链接:https://www.haomeiwen.com/subject/znvatqtx.html