模仿 win2000 的 tree.exe 做了一个,目录对齐线那里还有点问题
你先将就一下吧
=======================================================
/**
[Tree.java]
以图形显示驱动器或路径的文件夹结构。TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称。
/A 使用 ASCII 字符,而不使用扩展字符。 * Windows TREE 功能 Java版实现
* 创建日期:(2003-8-6)
* @author:ONE_Fox
* @author:[email protected]
*/import java.io.*;
import java.util.Vector;
public class Tree {
//参数标记--------------------//
public static int Tree_F = 1;
public static int Tree_A = 2;
public static int Tree_F_A = 3;
//配置信息--------------------//
private File path = new File("."); //路径
private File outFile = new File("outFile.txt"); //输出文件
private PrintWriter writeFile = null; //输出文件流
private Vector tmpOut = new Vector(20); //文件输出缓存
private String dirPoint = "└─";
private String dirPointX = "├─";
private String filePoint = "│ ";
private boolean searchModen = false; //是否显示文件
/**
* 构造方法:Tree(File path, int moden)
* @param path 路径 java.io.File
* @param moden 参数 int
*/
public Tree(File path, int moden) {
//参数配置------------------------//
this.path = path;
if(moden == Tree_F)
searchModen = true;
else if(moden == Tree_A) {
dirPoint = "\\---";
dirPointX = "+---";
filePoint = "| ";
}
else if(moden == Tree_F_A) {
searchModen = true;
dirPoint = "\\---";
dirPointX = "+---";
filePoint = "| ";
}
/*
else {
System.out.println("参数错误!");
System.exit(0);
} */
//遍历开始------------------------//
searchDir(path, 0);
}
/**
* 方法:searchDir(File dir, int deep)
* 遍历一个文件夹的文件&文件夹
* @param dir 文件夹 java.io.File
* @param deep 目录深度 int
*/
private void searchDir(File dir, int deep) {
StringBuffer outStr = new StringBuffer("");
File fileList[] = dir.listFiles();
boolean hasDirectory = false;
File lastDirectory = null;
//搜索是否有子目录----------------//
for(int i = 0; i < fileList.length; i++)
if(fileList[i].isDirectory()) {
hasDirectory = true;
lastDirectory = fileList[i];
}
//打印文件名----------------------//
if(searchModen == true) {
for(int i = 0; i < fileList.length; i++) {
if(fileList[i].isFile()) {
outStr = new StringBuffer("");
for(int j = 0; j < deep; j++)
outStr.append(filePoint);
outStr.append((hasDirectory?filePoint:" ")
+ fileList[i].getName());
System.out.println("" + outStr);
tmpOut.add("" + outStr);
}
}
}
//打印子目录----------------------//
for(int i = 0; i < fileList.length; i++) {
if(fileList[i].isDirectory()) {
outStr = new StringBuffer("");
for(int j = 0; j < deep; j++)
outStr.append(filePoint);
outStr.append((lastDirectory.equals(fileList[i])?dirPoint:dirPointX)
+ fileList[i].getName());
System.out.println("" + outStr);
tmpOut.add("" + outStr);
searchDir(fileList[i], (deep + 1)); //递归遍历子目录
}
}
}/**
* 程序入口:
*/
public static void main(String args[]) {
//参数分析------------------------//
switch(1) {
case 1:
if(args.length == 0) {
new Tree(new File("."), 0);
break;
}
case 2:
if(args.length == 1) {
String parameter = args[0];
if(new File(parameter).isDirectory()) {
new Tree(new File(parameter), 0);
break;
}
else if(parameter.compareToIgnoreCase("/F") == 0) {
new Tree(new File("."), Tree.Tree_F);
break;
}
else if(parameter.compareToIgnoreCase("/A") == 0) {
new Tree(new File("."), Tree.Tree_A);
break;
}
else if(parameter.compareToIgnoreCase("/h") == 0) {
System.out.println("以图形显示驱动器或路径的文件夹结构。\n\n"
+"TREE [drive:][path] [/F] [/A]\n\n"
+" /F 显示每个文件夹中文件的名称。\n"
+" /A 使用 ASCII 字符,而不使用扩展字符。\n");
break;
}
else {
System.out.println("无效命令选项 - " + parameter);
break;
}
}
case 3:
if(args.length == 2) {
String parameter1 = args[0];
String parameter2 = args[1];
if(new File(parameter1).isDirectory()) {
if(parameter2.compareToIgnoreCase("/F") == 0) {
new Tree(new File(parameter1), Tree.Tree_F);
break;
}
else if(parameter2.compareToIgnoreCase("/A") == 0) {
new Tree(new File(parameter1), Tree.Tree_A);
break;
}
else {
System.out.println("无效命令选项 - "
+ parameter1 + " " + parameter2);
break;
}
}
else if(parameter1.compareToIgnoreCase("/F") == 0
&& parameter2.compareToIgnoreCase("/A") == 0) {
new Tree(new File("."), Tree.Tree_F_A);
break;
}
else {
System.out.println("无效命令选项 - "
+ parameter1 + " " + parameter2);
break;
}
}
case 4:
if(args.length == 3) {
String parameter1 = args[0];
String parameter2 = args[1];
String parameter3 = args[2];
if(new File(parameter1).isDirectory()
&& parameter2.compareToIgnoreCase("/F") == 0
&& parameter3.compareToIgnoreCase("/A") == 0) {
new Tree(new File(parameter1), Tree.Tree_F_A);
break;
}
else {
System.out.println("无效命令选项 - "
+ parameter1 + " " + parameter2
+ " " + parameter3);
break;
}
}
default:
System.out.println("太多命令选项");
break;
}
}
}
你先将就一下吧
=======================================================
/**
[Tree.java]
以图形显示驱动器或路径的文件夹结构。TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称。
/A 使用 ASCII 字符,而不使用扩展字符。 * Windows TREE 功能 Java版实现
* 创建日期:(2003-8-6)
* @author:ONE_Fox
* @author:[email protected]
*/import java.io.*;
import java.util.Vector;
public class Tree {
//参数标记--------------------//
public static int Tree_F = 1;
public static int Tree_A = 2;
public static int Tree_F_A = 3;
//配置信息--------------------//
private File path = new File("."); //路径
private File outFile = new File("outFile.txt"); //输出文件
private PrintWriter writeFile = null; //输出文件流
private Vector tmpOut = new Vector(20); //文件输出缓存
private String dirPoint = "└─";
private String dirPointX = "├─";
private String filePoint = "│ ";
private boolean searchModen = false; //是否显示文件
/**
* 构造方法:Tree(File path, int moden)
* @param path 路径 java.io.File
* @param moden 参数 int
*/
public Tree(File path, int moden) {
//参数配置------------------------//
this.path = path;
if(moden == Tree_F)
searchModen = true;
else if(moden == Tree_A) {
dirPoint = "\\---";
dirPointX = "+---";
filePoint = "| ";
}
else if(moden == Tree_F_A) {
searchModen = true;
dirPoint = "\\---";
dirPointX = "+---";
filePoint = "| ";
}
/*
else {
System.out.println("参数错误!");
System.exit(0);
} */
//遍历开始------------------------//
searchDir(path, 0);
}
/**
* 方法:searchDir(File dir, int deep)
* 遍历一个文件夹的文件&文件夹
* @param dir 文件夹 java.io.File
* @param deep 目录深度 int
*/
private void searchDir(File dir, int deep) {
StringBuffer outStr = new StringBuffer("");
File fileList[] = dir.listFiles();
boolean hasDirectory = false;
File lastDirectory = null;
//搜索是否有子目录----------------//
for(int i = 0; i < fileList.length; i++)
if(fileList[i].isDirectory()) {
hasDirectory = true;
lastDirectory = fileList[i];
}
//打印文件名----------------------//
if(searchModen == true) {
for(int i = 0; i < fileList.length; i++) {
if(fileList[i].isFile()) {
outStr = new StringBuffer("");
for(int j = 0; j < deep; j++)
outStr.append(filePoint);
outStr.append((hasDirectory?filePoint:" ")
+ fileList[i].getName());
System.out.println("" + outStr);
tmpOut.add("" + outStr);
}
}
}
//打印子目录----------------------//
for(int i = 0; i < fileList.length; i++) {
if(fileList[i].isDirectory()) {
outStr = new StringBuffer("");
for(int j = 0; j < deep; j++)
outStr.append(filePoint);
outStr.append((lastDirectory.equals(fileList[i])?dirPoint:dirPointX)
+ fileList[i].getName());
System.out.println("" + outStr);
tmpOut.add("" + outStr);
searchDir(fileList[i], (deep + 1)); //递归遍历子目录
}
}
}/**
* 程序入口:
*/
public static void main(String args[]) {
//参数分析------------------------//
switch(1) {
case 1:
if(args.length == 0) {
new Tree(new File("."), 0);
break;
}
case 2:
if(args.length == 1) {
String parameter = args[0];
if(new File(parameter).isDirectory()) {
new Tree(new File(parameter), 0);
break;
}
else if(parameter.compareToIgnoreCase("/F") == 0) {
new Tree(new File("."), Tree.Tree_F);
break;
}
else if(parameter.compareToIgnoreCase("/A") == 0) {
new Tree(new File("."), Tree.Tree_A);
break;
}
else if(parameter.compareToIgnoreCase("/h") == 0) {
System.out.println("以图形显示驱动器或路径的文件夹结构。\n\n"
+"TREE [drive:][path] [/F] [/A]\n\n"
+" /F 显示每个文件夹中文件的名称。\n"
+" /A 使用 ASCII 字符,而不使用扩展字符。\n");
break;
}
else {
System.out.println("无效命令选项 - " + parameter);
break;
}
}
case 3:
if(args.length == 2) {
String parameter1 = args[0];
String parameter2 = args[1];
if(new File(parameter1).isDirectory()) {
if(parameter2.compareToIgnoreCase("/F") == 0) {
new Tree(new File(parameter1), Tree.Tree_F);
break;
}
else if(parameter2.compareToIgnoreCase("/A") == 0) {
new Tree(new File(parameter1), Tree.Tree_A);
break;
}
else {
System.out.println("无效命令选项 - "
+ parameter1 + " " + parameter2);
break;
}
}
else if(parameter1.compareToIgnoreCase("/F") == 0
&& parameter2.compareToIgnoreCase("/A") == 0) {
new Tree(new File("."), Tree.Tree_F_A);
break;
}
else {
System.out.println("无效命令选项 - "
+ parameter1 + " " + parameter2);
break;
}
}
case 4:
if(args.length == 3) {
String parameter1 = args[0];
String parameter2 = args[1];
String parameter3 = args[2];
if(new File(parameter1).isDirectory()
&& parameter2.compareToIgnoreCase("/F") == 0
&& parameter3.compareToIgnoreCase("/A") == 0) {
new Tree(new File(parameter1), Tree.Tree_F_A);
break;
}
else {
System.out.println("无效命令选项 - "
+ parameter1 + " " + parameter2
+ " " + parameter3);
break;
}
}
default:
System.out.println("太多命令选项");
break;
}
}
}
遍历返回结果保存在当前目录的 outFile.txt 里
如果目录里文件、文件夹太多的话前面的会看不到,所以也输出到 outFile.txt
=====================================================================晕~ 帖子太长了! 链接↓(放一星期)
http://my.nbip.net/homepage/zhouB403/MyCode/TREE.rar
你还有实现dir命令的程序吗?
支持下列命令选项:
/A 显示具有指定属性的文件。
attributes
D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 - 表示“否”的前缀
/C 在文件大小中显示千位数分隔符。
/P 在每个信息屏幕后暂停。
/W 用宽列表格式。
具体的输出方式参照 DIR 命令即可。