CmdUtils.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package com.fd.util;
  2. import lombok.extern.log4j.Log4j2;
  3. import java.io.BufferedReader;
  4. import java.io.InputStreamReader;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. /**
  8. * Created by Owen on 2019/10/31 0031 16:05
  9. */
  10. @Log4j2
  11. public class CmdUtils {
  12. // linux 执行方法
  13. public static String exeCmd(String commandStr) {
  14. String result = null;
  15. try {
  16. String[] cmd = new String[]{"/bin/sh", "-c",commandStr};
  17. Process ps = Runtime.getRuntime().exec(cmd);
  18. BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream(),"UTF-8"));
  19. BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream(), "UTF-8"));
  20. log.info("===== br ========: {}", br == null);
  21. StringBuffer sb = new StringBuffer();
  22. StringBuffer errorStr = new StringBuffer();
  23. String line;
  24. while ((line = errorBuf.readLine()) != null) {
  25. errorStr.append(line).append("\n");
  26. System.out.println("error: "+line);
  27. }
  28. log.info("error result: {}", errorStr.toString());
  29. while ((line = br.readLine()) != null) {
  30. log.info("===== br.readLine: ======== {}", br.readLine());
  31. //执行结果加上回车
  32. System.out.println("br: "+line);
  33. sb.append(line).append("\n");
  34. log.info("line: {}", line);
  35. }
  36. result = sb.toString();
  37. System.out.println("result: " + result);
  38. log.info("result: {}", result);
  39. // 结束命令行
  40. int i = ps.waitFor();
  41. log.info("wsitFore : {}", i);
  42. // 关闭流
  43. br.close();
  44. errorBuf.close();
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. return result;
  49. }
  50. // linux 执行方法
  51. public static String exeCmd2(String commandStr) {
  52. String result = null;
  53. try {
  54. String[] cmd = new String[]{"/bin/sh", "-c",commandStr};
  55. Process ps = Runtime.getRuntime().exec(cmd);
  56. BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream(),"UTF-8"));
  57. BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream(), "UTF-8"));
  58. StringBuffer sb = new StringBuffer();
  59. StringBuffer errorStr = new StringBuffer();
  60. String errorLine;
  61. String str = "";
  62. String b= "";
  63. // StringBuffer per = new StringBuffer();
  64. ArrayList<Object> arrayList = new ArrayList<>();
  65. while ((errorLine = errorBuf.readLine()) != null) {
  66. // errorStr.append("\n"); // 为了打印日志好看,第一行先换行
  67. errorStr.append(errorLine).append("\n");
  68. if (errorLine.contains("Generated tile #")) {
  69. // 截取百分比
  70. str = errorLine.substring(errorLine.indexOf("% done)") - 7, errorLine.indexOf("% done)"));
  71. arrayList.add(str);
  72. }
  73. // b = errorLine.substring(0, errorLine.lastIndexOf("All done. {")+8);
  74. //
  75. // if ("All done".equals(b)) {
  76. // arrayList.add(b);
  77. // }
  78. }
  79. log.info("error result: {}", errorStr.toString());
  80. log.info("per: {}", Arrays.toString(arrayList.toArray()));
  81. String line;
  82. while ((line = br.readLine()) != null) {
  83. log.info("===== br.readLine: ======== {}", br.readLine());
  84. //执行结果加上回车
  85. System.out.println("br: "+line);
  86. sb.append(line).append("\n");
  87. log.info("line: {}", line);
  88. }
  89. result = sb.toString();
  90. System.out.println("result: " + result);
  91. log.info("result: {}", result);
  92. // 结束命令行
  93. int i = ps.waitFor();
  94. log.info("wsitFore : {}", i);
  95. // 关闭流
  96. br.close();
  97. errorBuf.close();
  98. } catch (Exception e) {
  99. e.printStackTrace();
  100. }
  101. return result;
  102. }
  103. // 记录进度
  104. public class PercentThread implements Runnable{
  105. @Override
  106. public void run() {
  107. }
  108. }
  109. public static void main(String[] args) {
  110. // StringBuffer buffer = new StringBuffer();
  111. //
  112. // for (int i = 0; i < 10; i++) {
  113. // buffer.append("ni hao:" + i).append("\n");
  114. // }
  115. // System.out.println(buffer.toString());
  116. String a = "Generated tile #470 of 470 ( 7.95 % done): 23-3419770-1832098 (pseudomerc, extents: 12637123.684560,2532482.957259:12637133.239189,2532492.511887) [mesh,atlas]. {encoder.cpp:process():304}";
  117. String b = "All done. {";
  118. System.out.println(a.substring(a.indexOf("% done)")-7, a.indexOf("% done)")));
  119. System.out.println(b.substring(0, b.lastIndexOf("All done. {")+8));
  120. System.out.println(a.contentEquals("Generated tile #"));
  121. System.out.println(a.contains("Generated tile #"));
  122. System.out.println(a.concat("Generated tile #"));
  123. }
  124. // // linux 执行方法
  125. // public static String exeCmd(String commandStr) {
  126. //
  127. // String result = null;
  128. // try {
  129. // String[] cmd = new String[]{"/bin/sh", "-c",commandStr};
  130. // Process ps = Runtime.getRuntime().exec(cmd);
  131. //
  132. // BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
  133. // log.info("===== br ========: {}", br == null);
  134. // StringBuffer sb = new StringBuffer();
  135. // log.info("===== sb ========");
  136. //
  137. //
  138. // } catch (Exception e) {
  139. // e.printStackTrace();
  140. // }
  141. //
  142. // return result;
  143. //
  144. // }
  145. }