run.exec("cmd.exe /c start tree");我想用java执行dos命令,但是dos命令懂的并不多,我想显示当前目录下的树型结构,可是这样执行dos总是一闪而过,怎么让它不自动关闭,有时候Java在dos下执行命令有时候窗口会自动关闭,有时候不会关闭呢,(比如打成jar包,会有一个dos窗口一闪而过)求高手好好解释解释,在这里先谢过了。急求,,,答案
调试欢乐多
不好意思,这是完整代码,求解了,顶了
java -jar xxx.jar
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
Process process;
public static void main(String[] args) {
TestExec test = new TestExec();
String open = "cmd.exe /k start tree";
if (args.length == 0) {
test.exec(open);
}
}
public void sendParams(String params) { } public void exec(String cmd) {
Runtime run = Runtime.getRuntime();
try {
process= run.exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
}
}
因为你可以通过程序把执行后的dos窗口的信息取到在java中调用cmd,如果我没有记错的话,窗口的执行过程可以在myeclipse的控制台打印出来。。而真正的dos窗口是不用打开的你说的打开后关闭。。那应该是在cmd下面执行dos命令的结果
//用线程的方式读取DOS窗口的输出内容
class StreamDrainer implements Runnable {
private InputStream ins;
public StreamDrainer(InputStream ins) {
this.ins = ins;
}
public void run(){
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(ins));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}//在dos下开始执行数据库备份与恢复
class DatabaseBR{
public DatabaseBR(){
}
public int StartRun(DatabaseBuckup databaseBuckup,String state,String statevalue)
{
int exitvalue=-1;
Runtime rt = Runtime.getRuntime();
Process processexp = null;
try{
//截取文件名称设置日志文件名
String file=" file=" + "'" + databaseBuckup.getFilepathname() + "'";
String logfilename=databaseBuckup.getFilepathname().substring(0,
databaseBuckup.getFilepathname().lastIndexOf("."));
//得到在dos下执行的命令
String exp = state + databaseBuckup.getDatabasename() + "/" +
databaseBuckup.getDatabasepassword() + "@" + databaseBuckup.getNetname() +
statevalue + file;
//开始执行命令
System.out.println(exp);
processexp=rt.exec(exp);
new Thread(new StreamDrainer(processexp.getInputStream())).start();
new Thread(new StreamDrainer(processexp.getErrorStream())).start();
processexp.getOutputStream().close();
//等待线程执行结束后返回
try {
exitvalue=processexp.waitFor();
System.out.println(exitvalue);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}catch(IOException e){
e.printStackTrace();
}
return exitvalue;
}
}
run.exec("cmd.exe /c start a.bat");
在bat文件中最后加上加上一个停顿的命令看看是否可以puse
也就是相当于在dos下执行tree这个命令,这样可以显示目录树型结构,我想要这种效果,
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f
call
start
你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f
call
start
弱弱的问一问,批处理有pause吗???
9楼的答案
批处理文件是最后加pause
很有问题。
win7下可以用timeout命令来暂停,还有一个常用的办法,就是ping本地IP达到暂停的效果,其实,你可以自己写一个延时的程序,不过java写出来的编译为exe的话,就超大了
引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊
你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f
call
startstart 具体参阅http://blog.sina.com.cn/s/blog_4e11110b0100qyc3.html
call 具体的看http://hi.baidu.com/ynnal911/blog/item/cc4d484f9f63c9f4d62afc56.html
其实可以百度的 ....白话一点就是start开一个窗口 call不让他关了 /f 是让你看清楚是什么显示出来了