现在的位置: 首页 > 综合 > 正文

如何用java实现doc命令行

2013年06月13日 ⁄ 综合 ⁄ 共 1930字 ⁄ 字号 评论关闭

如何用java实现doc命令行, dir显示当前所有目录下的文件 cd 文件目录 进入到该目录 cd ..退到上级目录,一面是我写的代码,调试了。 不过有点小bug就是当你进去的是文件就会提示空指针异常,而不是像doc那样提示“不是目录”,但不会退出,有想修复这个bug的可以修改 package cmd; import java.util.*; import java.io.*; /* * 用java实现doc命令行 * dir显示当初所有目录下的文件 * cd 文件目录 进入到该目录 * cd 。。退到上级目录
* 简要思路; * Class.forName(),传个类名进去实现多态操作 * 用Stack记录进入的目录,后进先退出 * 如有其它更好的方法可以相互探讨 */ public class CMDTest { /** * @param args * @throws Exception * @throws IllegalAccessException * @throws InstantiationException */ public static void main(String[] args) throws
InstantiationException, IllegalAccessException, Exception { // TODO Auto-generated method stub Stack<String> stack=new Stack<String>();//栈记录路径,后进先弹出 Scanner scan=new Scanner(System.in); stack.push("E:/");//把磁盘E路径压入栈,可以改成其他的如c,d盘符 while(true){ if(stack.isEmpty()){
stack.push("E:/");//防止cd 。。退出到栈空 } System.out.print(stack.peek().toString()+">"); String srcName=scan.nextLine(); String[] paths=srcName.split("\\s+",2);//把命令语句以空白切成两个,如 cd workspace 切成字符数组cd和workspace Command com=(Command) Class.forName("cmd."+paths[0].toUpperCase().trim()).newInstance();//生成执行命令,多态
if(paths.length>1){//如果输入如cd workspace,则把workspace传入para
com.execute(stack,paths[1]); } else com.execute(stack); } } } //cmd命令接口 interface Command{ public void execute(Stack<String> stack,String... para);//栈可以记录进入目录路径,para作为可变参数 } //dir 命令显示某个目录文件、 class DIR implements Command{ @Override public void execute(Stack<String>
stack, String... para) { if(para.length>0) stack.push((stack.peek().toString()+para[0]+"/"));//上一个目录+传进的目录 File dir=new File(stack.peek().toString());//此目录的文件 if(!dir.exists()){ System.out.println("该目录不存在"); } File[] files=dir.listFiles(); for(File file:files){
System.out.println(file);//显示该目录下所有的文件 } }} //cd workspace进入某个目录, cd ..退出上一个父目录 class CD implements Command{ @Override
public void execute(Stack<String> stack, String... para) { if(para.length>0){ // TODO Auto-generated method stub if(para[0].equals("..".trim())){//cd .. stack.pop();//出栈,退出上一个目录 } else{ stack.push(stack.peek().toString()+para[0]+"/");//上一个目录+传进的目录,即把当前目录压入栈
//System.out.println(stack.peek().toString()); } } } }

抱歉!评论已关闭.