java执行shell命令

简介: package com.pms.util;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apa

package com.pms.util;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 执行 linux命令
 *
 * @author mars
 *
 */
public class ExecuteLinux {

 // log4j实例名
 private static final Log log = LogFactory.getLog(ExecuteLinux.class
   .getCanonicalName());

 /**
  * 执行linux命令,并输出结果
  *
  * @param cmd
  * @throws RuntimeException
  * @throws IOException
  */
 public static void execute(String[] cmd) throws Exception {
  InputStream errorStream = null;
  InputStream inputStream = null ;
  Process ps = null;
  try {
   // String[] cmd = new String[] { "/bin/sh", "-c", "ls" };
   ps = Runtime.getRuntime().exec(cmd);
   log.debug("开始执行本地线程");
   
   errorStream = ps.getErrorStream(); // 正确结果的流
   inputStream = ps.getInputStream(); // 错误结果的流
   printError(errorStream);
   printInfo(inputStream);
   
  } catch (Exception e) {
   log.error("execute linux command error...", e);
   throw new Exception("execute linux command error...");
  }finally{
   if(errorStream != null){
    errorStream.close();
   }
   if(inputStream != null){
    inputStream.close();
   }
   
   ps.destroy();
  }
  
 }
 
 /**
  * 打印  正确信息
  * @param errorStream
  * @throws IOException
  */
 private static void printInfo(InputStream inputStream) throws IOException{
  
  StringBuffer sb = new StringBuffer();
  int line=0;
  while ((line = inputStream.read(new byte[1024])) != -1) {
   sb.append((char)line).append("\n");
  }
  String result = sb.toString();
  System.out.println("#####正确信息######:"+result);
  log.debug("#####正确信息LOG######:"+result);
 }
 
 /**
  * 打印错误信息
  * @param errorStream
  * @throws IOException
  */
 private static void printError(InputStream errorStream) throws IOException{
  
  StringBuffer sb = new StringBuffer();
  int line=0;
  while ((line = errorStream.read(new byte[1024])) != -1) {
   sb.append((char)line).append("\n");
  }
  String result = sb.toString();
  System.out.println("#####错误信息######:"+result);
  log.debug("#####错误信息LOG######:"+result);
 }
 
 /**
  * 获得 wgrib2 切割的linux命令,将grib2切割为二进制 bin 文件
  * @param pathName 文件路径名
  * @param fileName 文件名
  * @param savePath 要保存到的路径名
  * @param lists 条件集合(必不为空,因为从数据库获得,而存入数据库时,前台有校验不为空)
  * @return
  */
 public static String[] getLinuxCommand(String pathName, String fileName, String savePath, List<String> lists){
  
  //"/bin/sh", "-c",
  String[] cmd = new String[3];
  cmd[0] = "/bin/sh";
  cmd[1] = "-c";
  
  StringBuffer condition_bf = new StringBuffer();
  for (String str : lists) {
   condition_bf.append(str+" mb|");
  }
  // 将最后一个 '|' 符号截掉
  String condition_str = condition_bf.toString().substring(0, condition_bf.toString().length()-1);
  //wgrib2 -s Z_NAFP_C_BABJ_20120508000000_P_CNPC-T639-GMFS-HNEHE-00300.grib2 | grep -E "(\bHGT:20\b)|(\bHGT:30\b)" | wgrib2 -i Z_NAFP_C_BABJ_20120508000000_P_CNPC-T639-GMFS-HNEHE-00300.grib2 -no_header -bin data5.bin
  StringBuffer bf = new StringBuffer();
  bf.append("wgrib2 -s ");
  bf.append(pathName+"/"+fileName);
  bf.append(" | grep -E ");
  bf.append("\""+condition_str+"\"");
  bf.append(" | wgrib2 -i ");
  bf.append(pathName+"/"+fileName);
  bf.append(" -no_header -bin ");
  String newName = fileName.substring(0, fileName.indexOf(".")); // 去掉 .grib2 的文件名
  bf.append(savePath+"/"+newName+".bin");
  cmd[2] = bf.toString();
  
  return cmd;
 }
 
 public static void main(String[] args) {
//  String str = "new.grib2";
//  System.out.println(str.substring(0, str.indexOf(".")));
//  
//  String pathName = "/home/ftp/cwfs";
//  String fileName = "new_003.grib2";
//  String savePath ="/home/ftp/cwfs";
//  
//  List<String> lists = new ArrayList<String>();
//  lists.add("HET:20");
//  String[] command = getLinuxCommand(pathName, fileName, savePath, lists);
//  
//  System.out.println(command[2]);
  
//  File file = new File("E:temp");
//  System.out.println(file.getParent());
//  File[] listFiles = file.listFiles();
//  if(listFiles != null && listFiles.length > 0){
//   for (File f : listFiles) {
//    f.delete();
//   }
//  }
  
//  File[] list = file.listFiles();
//  for (File s : list) {
//   System.out.println(s.getPath());
//  }
  
 }
}

目录
相关文章
|
7月前
|
Arthas 存储 监控
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
445 8
|
8月前
|
存储 Unix Shell
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
391 1
|
8月前
|
监控 数据可视化 Java
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
455 13
|
9月前
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
10月前
|
Java
Java中执行命令并使用指定配置文件的最佳实践
通过本文的介绍,您可以了解如何在Java中使用 `ProcessBuilder`执行系统命令,并通过指定配置文件、设置环境变量和重定向输入输出流来控制命令的行为。通过这些最佳实践,可以确保您的Java应用程序在执行系统命令时更加健壮和灵活。
265 7
|
10月前
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
519 30
|
11月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
320 20
|
11月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
366 12
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
1622 7
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
282 1