根据 《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
网友评论