java程序调用bat

文章来源:http://www.cnblogs.com/xwdreamer/archive/2011/12/12/2296911.html

1.参考文献

1. 请教关于JAVA在WIN下执行.BAT文件的问题 ->6楼的回答

2.请问如何在调用cmd运行完bat文件后自动退出 ->11楼的回答

3.java调用bat

在前面的博客中写道了mysql的数据库备份与恢复,这个主要是通过手动调用bat文件来执行的,那么如何在程序中调用bat文件呢。这就是这篇博客需要讲的主题。

2.实例1:

 

import java.io.IOException;

public class InvokeBat4 {
    public void runbat(String batName) {
        String cmd = "cmd /c start F:\\database_backup\\ngx_backup\\"+ batName + ".bat";// pass
        try {
            Process ps = Runtime.getRuntime().exec(cmd);
            ps.waitFor();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("child thread donn");
    }

    public static void main(String[] args) {
        InvokeBat4 test1 = new InvokeBat4();
        test1.runbat("backup_ngx");
        System.out.println("main thread");
    }
}

2.1.缺点:

会弹出cmd框,并且不能自动关闭

2.2.解决方法:

在bat文件最后加上

exit

比如原来的bat文件内容如下:

mysqldump -uroot -proot --database ngx_ad ngx_authority ngx_jbpm ngx_mes ngx_model > F:\database_backup\ngx_backup\ngx_db.sql

我们将其修改为

mysqldump -uroot -proot --database ngx_ad ngx_authority ngx_jbpm ngx_mes ngx_model > F:\database_backup\ngx_backup\ngx_db.sql exit

2.3.能够自动退出但依然存在的问题

即使能够自动退出,但是每次调用这个bat的时候屏幕总是会闪一下cmd命令框。

3.改进实例,直接执行bat

import java.io.IOException;
import java.io.InputStream;

public class InvokeBat2 {
    public void runbat(String batName) {
        try {
            Process ps = Runtime.getRuntime().exec(batName);
            InputStream in = ps.getInputStream();
            int c;
            while ((c = in.read()) != -1) {
                System.out.print(c);// 如果你不需要看输出,这行可以注销掉
            }
            in.close();
            ps.waitFor();

        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("child thread done");
    }

    public static void main(String[] args) {
        InvokeBat2 test1 = new InvokeBat2();
        String batName = "F:\\database_backup\\ngx_backup\\backup_ngx.bat";
        test1.runbat(batName);
        System.out.println("main thread");
    }
}


 

 下一篇文章:Extjs+JSON实例http://www.cnblogs.com/xwdreamer/archive/2011/12/11/2296912.html

下一篇文章:算法面试题总结http://www.cnblogs.com/xwdreamer/archive/2011/12/13/2296910.html

 

 

 


 


 

你可能感兴趣的:(java程序调用bat)