1. 程式人生 > >java執行shell命令

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.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());
//  }
  
 }
}

相關推薦

java執行shell命令中有空格的處理方法

java執行shell命令中有空格的處理?Runtime.getRuntime().exec(cmdstring);如果此時cmdstring中的參數(例如cp文件時文件名)含有特殊符號空格,此時就會出現錯誤,因為源碼會按照一些特殊字符(" \t\n\r\f",註意到其中含有空格)去切分cmdstring

Java執行shell命令或cmd命令

執行命令加字首cmd命令 : cmd /cshell命令: shell -cpublicstaticvoid exeCmd(String commandStr) throws Exception {          BufferedReader br = null; 

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

Android Java執行Shell命令

2、使用 (2) 呼叫上面介紹的execCommand函式, 注意有些命令可能執行時間較長,所以最好線上程中執行execCommand 3、使用場景 以目前自己的幾個場景舉下例子 (1) 靜默安裝和解除安裝 這個很多朋友已經用過了Android root許可權靜默安裝或解除安裝應用,

java 執行shell命令

import java.io.BufferedReader; import java.io.InputStreamReader; public class shell { public static String executeCommand(String c

java 執行shell命令及日誌收集避坑指南

  有時候我們需要呼叫系統命令執行一些東西,可能是為了方便,也可能是沒有辦法必須要呼叫。涉及執行系統命令的東西,則就不能做跨平臺了,這和java語言的初衷是相背的。   廢話不多說,java如何執行shell命令?自然是呼叫java語言類庫提供的介面API了。   1. java執行shell的ap

java程式碼執行shell命令

java程式碼執行shell命令,需要通過google出品的工具類ssxcute.jar,下載地址: https://download.csdn.net/download/qq_15076569/10797217 java程式碼操作shell程式碼: import net.neorem

java 通過 ssh 執行 shell 命令

public abstract class Shell implements AutoCloseable{ abstract boolean executeCommands(String... commands); abstract Strin

通過java程式碼執行shell命令的小案列

一 需求描述: 通常我們操作linux伺服器都是通過遠端連線工具,比如:SecureCRT,Xmanager等工具,在其上輸入命令來完成一些工作,但是在實際工作中,有些時候需要我們通過java程式碼遠端連線到linux伺服器執行一些shell命令,包括叢集的狀

java呼叫shell命令並獲取執行結果

原文地址:http://blog.csdn.net/arkblue/article/details/7897396 使用到Process和Runtime兩個類,返回值通過Process類的getInputStream()方法獲取 package ark;

java 執行linux命令shell指令碼方法

一.容易出錯的地方之一,執行ps等命令要注意到jvm呼叫的linux命令也是一個程序 背景:第1,2,3,4行程式碼都可以完成java 執行shell指令碼的任務,第2,3,4行程式碼的陣列中第三個引數可以是指令碼名,也可以是cd / ls / chown 這種命令。 問題

Android java程式碼中如何執行shell命令

public void execCommand(String command) throws IOException {         Runtime runtime = Runtime.getRuntime();         Process proc = runtime.exec(command);

java遠端執行shell命令

1、連線伺服器,執行shell的方法package com.shishike.susie.utility; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.P

Java執行linux命令shell指令碼

import java.io.*; import java.util.*; import org.apache.log4j

java執行cmd命令

spa dbca script dmgr share pub pdm meeting 碎片 從網上找的java執行cmd命令的文章,摘抄一段。 java的Runtime.getRuntime().exec(commandStr)可以調用執行cmd指令。cmd /c dir

Centos 執行shell命令返回127錯誤

建數據庫 mysq data 存在 思路 功能 自動創建 運行 用戶 shell腳本功能:連接mysql,自動創建數據庫,腳本如下 mysql -h$MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASSWORD --default-character-s

php 執行shell命令 打印錯誤信息

信息 資源 null function $cmd = "rm 1.txt";//刪除一個不存在的文件,查看報錯信息 $res = doShell($cmd); var_dump($res); //該函數沒有限制條件,可以直接放在代碼中使用 function doShell($cmd,$cwd=

python之執行shell命令

python[[email protected]/* */ ~]# python Python 2.7.5 (default, Sep 15 2016, 22:37:39) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2 Type "help",

執行shell命令的函數——system()、popen()

system、popen1、FILE* popen(const char* cmd,const char* type); int pclose(FILE* stream); popen()函數fork()一個子進程,創建管道用於父子進程間通信,父進程要麽從管道讀,要麽往管道寫,執行一個shell以

java執行cmd命令並獲取輸出結果

cat result ring stream jarsigner blog gin org common 1.java執行cmd命令並獲取輸出結果 1 import java.io.BufferedReader; 2 import java.io.InputStrea