在项目中用到了数据库的备份和恢复功能,就通过java的Runtime.getRuntime().exec()来调用cmd或者linux命令来导出和导入.sql文件。但是在执行恢复时,程序一直被阻塞,没法往下运行,很头疼。代码有点糙:

        public static void main(String[] args) {String filepath="D:/Program_Files/Tomcat8.0/webapps/examine/ProductImg/backup.sql";
//             System.out.println("导入数据库结果:"+recover(filepath));constract(filepath);}public static int constract(String filepath){String ip=Mydbconnection.getHost();String database="examine";
//      String database=Mydbconnection.getDbname();String userName=Mydbconnection.getUsername();String password=Mydbconnection.getPassword();String stmt1 = "mysqladmin -h "+ip+" -u "+userName+" -p"+password+" create "+database;String stmt2 = "mysql -h"+ip+" -u"+userName+" -p"+password+" "+database+" < \"" + filepath+"\"";String cmd = "cmd /k "+stmt2;System.out.println(stmt1);System.out.println(cmd);exect(stmt1);exect(cmd);return 0;}public static int exect(String comm){int finished=0;try {Runtime rt=Runtime.getRuntime();Process proc=rt.exec(comm);InputStream stderr=proc.getErrorStream();InputStreamReader isr=new InputStreamReader(stderr);BufferedReader br=new BufferedReader(isr);String line=null;System.out.println("<error></error>");while((line=br.readLine())!=null){
//                             String encoded=new String(line.getBytes("gbk"),"GB18030");//GB2312/CP936/GB18030
//                             System.out.println(encoded);System.out.println(line);}System.out.println();int exitVal=proc.waitFor();System.out.println("Process exitValue:"+exitVal);finished=exitVal;} catch (Exception e) {e.printStackTrace();}return finished;}

刚开始一直显示一串乱码,整了好半天,虽然没整好,但是也猜到它想表示啥了——“系统找不到指定的路径”,原来是文件的路径有问题,真的是坑。

真正的问题出在第二条去exec()执行的cmd字符串中,cmd后面跟的参数为/k,百度了一下,发现/k表示执行完毕不关闭窗口,/c是执行完毕关闭窗口。换成/c就好了。

java中调用cmd命令被阻塞无法返回和继续执行相关推荐

  1. java 执行cmd 堵塞_java中调用cmd命令被阻塞无法返回和继续执行

    在项目中用到了数据库的备份和恢复功能,就通过java的Runtime.getRuntime().exec()来调用cmd或者linux命令来导出和导入.sql文件.但是在执行恢复时,程序一直被阻塞,没 ...

  2. IDEA清空控制台以及Java中运行cmd命令实现清屏操作

    文章目录 IDEA中清空控制台方法 解决办法: 一:打印换行 二:通过按键事件控制键盘执行清空控制台动作 三:附:Java 按键事件 KeyEvent 四:使用鼠标箭头触发按钮实现清空控制台操作 Wi ...

  3. VC中调用cmd命令的四种方式

    1. system方法: 原型: int __cdecl system(const char *); 例如: system("ipconfig"); 2. WinExec方法: 相 ...

  4. [转]Java 程序调用cmd命令

    由于不知道确切的作者,所有在此不写转自哪里了,但是非常感谢作者. java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是 ...

  5. java cmd 返回结果_Java调用cmd命令行并返回执行结果

    命令提示符是在操作系统中,提示进行命令输入的一种工作提示符.在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似 ...

  6. C++里的调用cmd命令的方法

    C++中调用cmd命令的方法 1.cmd函数修改系统时间 2.cmd函数修改控制台颜色 3.通过cmd函数打开某个指定路径的文件 4.cmd命令怎样打开网页 大家现在可能还在为C++自动化犯愁吧!今天 ...

  7. java调用exe_Windows系统中Java调用cmd命令及执行exe程序的方法

    Java调用cmd命令,并输出显示信息: package com.anxin.cmd.test; import java.io.BufferedReader; import java.io.Input ...

  8. java调用cmd_Java调用CMD命令

    Java调用CMD命令 制作人:全心全意 示例代码如下: package com.zq.jpy; import java.io.BufferedReader; import java.io.IOExc ...

  9. java 调用cmd命令

    今天,记录下java操作cmd命令,觉得不错,记录下来. 关键在于java的Runtime.getRuntime().exec(commandStr) JAVA代码 关键代码在于java的Runtim ...

  10. java调用cmd命令执行mysql命令

    java调用cmd命令在linux执行mysql数据恢复命令 Statement statement = con.createStatement(); ResultSet resultsql = st ...

最新文章

  1. MySQL删除表及删除表数据操作
  2. Mysql数据库权限问题
  3. 定义一个dto对象_正确理解DTO、值对象和POCO
  4. nft platform usecase diagram
  5. Spark资源调度分配
  6. MinIO Client完全指南 ​​​​​​​
  7. Linux 浅谈代码打印到终端的缓冲区(进度条程序)
  8. 高效编排有状态应用——TiDB 的云原生实践与思考
  9. WPF应用基础篇---TreeView
  10. CANape CAN工程的创建
  11. Github中那些迷之缩写?LGTM?
  12. ASP.NET2.0 ReportingServices,报表灵魂的收割者(一)【月儿原创】
  13. 【LeetCode】算法初涉
  14. 120550-35-8,Biotin-PFP ester生物素-五氟苯酯与伯氨基(-NH2)反应
  15. SpringCloud版本选择
  16. ElementUI之el-pagination样式修改(小三角、“前往”、页码数)
  17. 麦肯锡著名的三大结构化工具:金字塔原理、MECE和逻辑树
  18. 移动互联网的未来在非洲
  19. 实体店为什么难以留住客户?商业模式值得尝试
  20. 每周一品 · 磁选机中的磁性材料

热门文章

  1. 不是技术牛人,如何拿到国内IT巨头的Offer
  2. 机器学习算法之GMM模型
  3. Windows安装和设置教程
  4. SpringBoot实现微信授权登录、二维码登录
  5. mcs-51单片机CPU的内部结构及工作原理
  6. Python坐标系转换
  7. 外贸企业管理系统解决方案丨汇信
  8. java kdj_KDJ 指标简单实现
  9. 什么是索引?怎么创建索引?索引的使用原则?
  10. 如何用C语言实现批量修改文件类型