java 执行dos命令

时间:2022-09-02 20:11:49
 run.exec("cmd.exe /c start tree");我想用java执行dos命令,但是dos命令懂的并不多,

我想显示当前目录下的树型结构,可是这样执行dos总是一闪而过,怎么让它不自动关闭,

有时候Java在dos下执行命令有时候窗口会自动关闭,有时候不会关闭呢,(比如打成jar包,会有一个dos窗口一闪而过)

求高手好好解释解释,在这里先谢过了。

急求,,,答案

27 个解决方案

#1


Runtime.getRuntime().exec("cmd.exe /c start tree");
不好意思,这是完整代码,求解了,顶了

#2


打成jar包后,在命令行执行
java -jar xxx.jar

#3


cmd /c   是执行完命令后关闭命令窗口。

cmd /k  是执行完命令后不关闭命令窗口。

#4


你想要什么样的 ?

#5


pause ?

#6


"cmd.exe /k start tree" 还是关闭dos窗口,我想Runtime.getRuntime().exec("cmd.exe /k start tree");执行完,dos窗口不关闭,顶顶,,,

分数我可以加的,帮帮忙了,,

#7


这种效果吗?
  Runtime.getRuntime().exec("cmd.exe /c start call tree /f");

#8


源代码

import java.io.IOException;

public class TestExec {
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();

}
}

#9


批处理文件是最后加pause

#10


如果是在程序中的话。。完全可以不管dos窗口是不是关闭。。
因为你可以通过程序把执行后的dos窗口的信息取到。。。

在java中调用cmd,如果我没有记错的话,窗口的执行过程可以在myeclipse的控制台打印出来。。而真正的dos窗口是不用打开的。。。

你说的打开后关闭。。那应该是在cmd下面执行dos命令的结果。。。

#11


我的程序


//用线程的方式读取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;
}
  }

#12


你把这些命令写在一个bat文件,使用
run.exec("cmd.exe /c start a.bat");
在bat文件中最后加上加上一个停顿的命令看看是否可以puse

#13


我也想知道答案。。。

#14


必须用dos显示文件目录树型结构,,
也就是相当于在dos下执行tree这个命令,这样可以显示目录树型结构,我想要这种效果,

#15


学习了!我也不明白!

#16


如果在批处理写入tree这个符号,再采用run.exec("cmd.exe /c start a.bat");

这个方式,dos窗口不会闭了,但有没有不用批处理文件的,因为不允许有多允的文件

#17


还是谢谢了

#18


引用 7 楼 zqfddqr 的回复:
这种效果吗?
  Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊

#19


引用 18 楼 zqfddqr 的回复:
引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊



不好意思,我没看请,我试试。。。。

#20


你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f 
call
start

#21


你的分两次执行吧,第一次cmd,第二次tree,windows中要不关闭doc窗口是这样弄得。不知道java中这样行不行。

#22


JDK 5.0的新特性 有执行本地方法的,好好去看。

#23


该回复于2011-11-04 09:33:32被版主删除

#24


引用 18 楼 zqfddqr 的回复:
引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊


你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f  
call
start

#25


看到过N个批处理后边加pause。
弱弱的问一问,批处理有pause吗???
9楼的答案
批处理文件是最后加pause
很有问题。
win7下可以用timeout命令来暂停,还有一个常用的办法,就是ping本地IP达到暂停的效果,其实,你可以自己写一个延时的程序,不过java写出来的编译为exe的话,就超大了

#26


 引用 18 楼 zqfddqr 的回复:


引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊


你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f   
call
start

start 具体参阅http://blog.sina.com.cn/s/blog_4e11110b0100qyc3.html
call 具体的看http://hi.baidu.com/ynnal911/blog/item/cc4d484f9f63c9f4d62afc56.html
其实可以百度的 ....

白话一点就是start开一个窗口 call不让他关了 /f 是让你看清楚是什么显示出来了

#27


Runtime.getRuntime().exec("cmd.exe /c start call tree /f");

#1


Runtime.getRuntime().exec("cmd.exe /c start tree");
不好意思,这是完整代码,求解了,顶了

#2


打成jar包后,在命令行执行
java -jar xxx.jar

#3


cmd /c   是执行完命令后关闭命令窗口。

cmd /k  是执行完命令后不关闭命令窗口。

#4


你想要什么样的 ?

#5


pause ?

#6


"cmd.exe /k start tree" 还是关闭dos窗口,我想Runtime.getRuntime().exec("cmd.exe /k start tree");执行完,dos窗口不关闭,顶顶,,,

分数我可以加的,帮帮忙了,,

#7


这种效果吗?
  Runtime.getRuntime().exec("cmd.exe /c start call tree /f");

#8


源代码

import java.io.IOException;

public class TestExec {
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();

}
}

#9


批处理文件是最后加pause

#10


如果是在程序中的话。。完全可以不管dos窗口是不是关闭。。
因为你可以通过程序把执行后的dos窗口的信息取到。。。

在java中调用cmd,如果我没有记错的话,窗口的执行过程可以在myeclipse的控制台打印出来。。而真正的dos窗口是不用打开的。。。

你说的打开后关闭。。那应该是在cmd下面执行dos命令的结果。。。

#11


我的程序


//用线程的方式读取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;
}
  }

#12


你把这些命令写在一个bat文件,使用
run.exec("cmd.exe /c start a.bat");
在bat文件中最后加上加上一个停顿的命令看看是否可以puse

#13


我也想知道答案。。。

#14


必须用dos显示文件目录树型结构,,
也就是相当于在dos下执行tree这个命令,这样可以显示目录树型结构,我想要这种效果,

#15


学习了!我也不明白!

#16


如果在批处理写入tree这个符号,再采用run.exec("cmd.exe /c start a.bat");

这个方式,dos窗口不会闭了,但有没有不用批处理文件的,因为不允许有多允的文件

#17


还是谢谢了

#18


引用 7 楼 zqfddqr 的回复:
这种效果吗?
  Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊

#19


引用 18 楼 zqfddqr 的回复:
引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊



不好意思,我没看请,我试试。。。。

#20


你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f 
call
start

#21


你的分两次执行吧,第一次cmd,第二次tree,windows中要不关闭doc窗口是这样弄得。不知道java中这样行不行。

#22


JDK 5.0的新特性 有执行本地方法的,好好去看。

#23


该回复于2011-11-04 09:33:32被版主删除

#24


引用 18 楼 zqfddqr 的回复:
引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊


你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f  
call
start

#25


看到过N个批处理后边加pause。
弱弱的问一问,批处理有pause吗???
9楼的答案
批处理文件是最后加pause
很有问题。
win7下可以用timeout命令来暂停,还有一个常用的办法,就是ping本地IP达到暂停的效果,其实,你可以自己写一个延时的程序,不过java写出来的编译为exe的话,就超大了

#26


 引用 18 楼 zqfddqr 的回复:


引用 7 楼 zqfddqr 的回复:
这种效果吗?
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
这个你试没啊


你能解释一下什么意思么???
Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
关于 /f   
call
start

start 具体参阅http://blog.sina.com.cn/s/blog_4e11110b0100qyc3.html
call 具体的看http://hi.baidu.com/ynnal911/blog/item/cc4d484f9f63c9f4d62afc56.html
其实可以百度的 ....

白话一点就是start开一个窗口 call不让他关了 /f 是让你看清楚是什么显示出来了

#27


Runtime.getRuntime().exec("cmd.exe /c start call tree /f");