论坛首页 Java企业应用论坛

写了个java版的cmd

浏览 14860 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (16) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-02   最后修改:2010-01-02
OO
今天试着写了个java版的cmd,其实核心代码就是用RunTime类的exec()方法,不过觉得目录转换的模拟还是很有趣,“cd..”命令我还没写好.



代码如下:


JavaCmd.java
package com.cmd;

import java.io.*;


/**
 * 模拟cmd的类
 * @author lupin
 * @version 1.0 2009-12-25
 */
public class JavaCmd {
    public static Process execCmd(String command){                       //执行cmd命令的方法
    	JavaCmd.changDir(command);
    	Runtime run = Runtime.getRuntime();
    	Process pro =null;
    	try {
			pro = run.exec("cmd /c" + command,null,new File(System.getProperty("user.dir")));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return pro;
    }
    
    public static void showResult(Process pro){                        //回显命令执行结果的方法
		InputStream is = pro.getInputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		String s = null;
		try {
			s = br.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	while(s != null){
    		System.out.println(s);
    		try {
				s = br.readLine();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	}
    }
    
    public static void showWindow(){                         //显示cmd窗口
    	System.out.println("Microsoft Windows XP [版本 5.1.2600]");
    	System.out.println("<c> 版权所有 1985-2001 Microsoft 	Corp.");
    	String strHome = System.getProperty("user.home");
    	System.setProperty("user.dir", strHome);
    	String strDir = System.getProperty("user.dir");
    	System.out.print(strDir + ">");
    }
    
    public static void changDir(String str){                              //转换目录的方法
        if(str.indexOf("dir") < 0 && str.endsWith(":")){
        	System.setProperty("user.dir", str + "\\");
        }
        else if(str.indexOf("cd") >= 0 && str.indexOf(":") >= 0){
        	int i = 3;
        	String str1 = str.substring(i);
        	System.setProperty("user.dir",str1);
        }
        else if(str.indexOf("cd") >= 0 && str.indexOf(":") < 0){
        	String dir = System.getProperty("user.dir");
        	String temp = dir.substring(0,2);
        	String tempStr = str.substring(3);
        	System.setProperty("user.dir", temp + tempStr);
        }
        else if(str.indexOf("cd /") == 0){
        	String dir = System.getProperty("user.dir");
        	String dirTmp = dir.substring(0, 3);
        	System.setProperty("user.dir", dirTmp);
        }
        else if(str.indexOf("cd..") == 0){
        	
        }
    }
}




StartCmd.java

package com;

import java.util.Scanner;

import com.cmd.*;

public class StartCmd {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		JavaCmd.showWindow();
        while(true){
		    String command =input.nextLine();
		    Process pro = JavaCmd.execCmd(command);
		    JavaCmd.showResult(pro);
		    String strDir = System.getProperty("user.dir");
		    System.out.print(strDir + ">");
        }
	}

}



  • 大小: 47.1 KB
   发表时间:2010-01-03  
  System.out.println("Microsoft Windows XP [版本 5.1.2600]");  
  System.out.println("<c> 版权所有 1985-2001 Microsoft  Corp.");

我晕,这两句直接是syso的啊。。我以为是从系统获得的。。。
2 请登录后投票
   发表时间:2010-01-03  
呵呵,Java中应该又获取系统信息的函数的,不过楼主的只能在windows下运行,linux下就美发完了 !!
0 请登录后投票
   发表时间:2010-01-03  
不懂楼主什么意思,是不是第一次学会怎么调用run.exec函数启动一个进程感觉兴奋 就来 展示下


感情 你把linux的一些日常命令用java封装下 移到wendows下 这样才能锻炼下能力 
0 请登录后投票
   发表时间:2010-01-03  
liuhello 写道
不懂楼主什么意思,是不是第一次学会怎么调用run.exec函数启动一个进程感觉兴奋 就来 展示下


感情 你把linux的一些日常命令用java封装下 移到wendows下 这样才能锻炼下能力 


觉得好玩所以试着写了一下,用java封装linux命令要怎么实现呢?
0 请登录后投票
   发表时间:2010-01-03  
wujiazhao88 写道

我晕,这两句直接是syso的啊。。我以为是从系统获得的。。。


开始是从系统获得的,可是有问题,总是不能把信息显示在正确的位置,就直接输出了。

0 请登录后投票
   发表时间:2010-01-04  
lupin啊兰 写道
liuhello 写道
不懂楼主什么意思,是不是第一次学会怎么调用run.exec函数启动一个进程感觉兴奋 就来 展示下


感情 你把linux的一些日常命令用java封装下 移到wendows下 这样才能锻炼下能力 


觉得好玩所以试着写了一下,用java封装linux命令要怎么实现呢?

比如我上学时写过ls.java
java ls c\user\tools
java ls home\mm\tools
可以把 对应的目录内容打出来
cp.java
可以把对应的文件拷贝至对应目录
0 请登录后投票
   发表时间:2010-01-04  
liuhello 写道
不懂楼主什么意思,是不是第一次学会怎么调用run.exec函数启动一个进程感觉兴奋 就来 展示下


感情 你把linux的一些日常命令用java封装下 移到wendows下 这样才能锻炼下能力 



貌似windows 7下面已经实现shell的控制台。
0 请登录后投票
   发表时间:2010-01-04  
在lunix下需要TELNET 过去,你还得熟悉TELNET
0 请登录后投票
   发表时间:2010-01-04  
这个只是调用系统,建议用javaAPI直接写,好的多,而且跨平台,
java对文件目录的支持还是可以的,写个真正版的cmd也比较容易,exec()那是外挂呀!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics