Java调用shell脚本

Java调用shell脚本也许在某种情况下 Java 程序需要调用 shell 脚本才能完成 比如为了从其他服务器上下载一些文件 但是却不能使用普通的 sftp 代码完成 需要使用到证书 这时 shell 脚本就比较方便在这里我写了一个工具类 是为了调用 shell 脚本的 代码如下 publicclassJ publicstatic Strin

也许在某种情况下,Java程序需要调用shell脚本才能完成, 比如为了从其他服务器上下载一些文件,但是却不能使用普通的sftp代码完成,需要使用到证书, 这时shell脚本就比较方便 在这里我写了一个工具类,是为了调用shell脚本的。代码如下: 
 public class JaveShellUtil { 
    public static int ExecCommand(String command) { int retCode = 0; try { Process process = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", command }, null, null); retCode = process.waitFor(); ExecOutput(process); } catch (Exception e) { retCode = -1; } return retCode; } public static boolean ExecOutput(Process process) throws Exception { if (process == null) { return false; } else { InputStreamReader ir = new InputStreamReader(process.getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line; String output = ""; while ((line = input.readLine()) != null) { output += line + "\n"; } input.close(); ir.close(); if (output.length() > 0) { } } return true; } }
public class MyShell { public static void main(String[] args) { String command="cfg/demo.sh"; //需要传递的就是shell脚本的位置 int retCode=JaveShellUtil.ExecCommand(command); System.out.println(retCode+"retCode"); if(retCode==0){ System.out.println("success....."); }else{ System.out.println("error....."); } } }

(2)传递参数,为了在shell脚本中获得对应的参数,比如使用shell脚本创建某一个时间的文件夹时

package com.zhou.dado.sehll; import com.zhou.dado.util.JaveShellUtil; public class MyShell { public static void main(String[] args) { String command="cfg/demo.sh"; //需要传递的就是shell脚本的位置,参数的话每一个之间需要使用空格隔开,务必 int retCode=JaveShellUtil.ExecCommand(command+" "+"zhoudado"+" "+"barnamefile"+" "+"bxmnamefile"); System.out.println(retCode+"retCode"); if(retCode==0){ System.out.println("success....."); }else{ System.out.println("error....."); } } }

注:在传递参数时,command后面必须要有一个空格,也就是说每个的参数后面都需要有一个空格才可以,我这里是传递了三个参数

#!/usr/bin/env bash param1=$1 param2=$2 param3=$3 basepath="/app/app/$param1" mkdir -p $basepath

注意:执行shell脚本是通过java的Runtime.getRuntime().exec()方法调用的。这种调用方式可以达到目的,但是他在java虚拟机中非常消耗资源,即使外部命令本身能很快执行完毕,频繁调用时创建进程的开销也非常可观。java虚拟机执行这个命令的过程是:首先克隆一下和当前虚拟机拥有一样环境变量的进程,再用这个新的进程去执行外部命令,最后在退出这个进程,如果频繁执行这个操作,系统的消耗会很大,不仅是CPU,内存的负担也很重。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205250.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:27
下一篇 2026年3月19日 下午6:27


相关推荐

  • 千百撸[通俗易懂]

    千百撸[通俗易懂]千百撸(黄网)

    2022年7月2日
    28
  • 电流转电压的multisim仿真电路图

    电流转电压的multisim仿真电路图通过运放实现电流转电压

    2022年5月18日
    38
  • IDEA这些既好用又好玩的三十多个宝贝插件你还不知道吗?「建议收藏」

    小编整理的一些好用的有趣的插件如果有什么问题,欢迎大家评论,群文件也有这些IDEA插件QQ交流群:99979568IDEA下载插件教程如果无法在线下载插件,文末有我下载好的安装包,以及安装包安装的教程强烈推荐的插件PresentationAssistant快捷键展示Codota代码智能提示AlibabaJavaCodeGuidelines—阿里巴巴Java代码规范Translation-必备的翻译插件SequenceDiagra.

    2022年4月8日
    49
  • win2008安装mysql8.0「建议收藏」

    win2008安装mysql8.0「建议收藏」mysql升级到8.0还是有一些变动,先说一下变动的地方有有些:不能直接修改root的权限了,需要新建用户然后再设置用户的权限;更改了密码的加密方式,mysql8之前是使用的mysql_native_password规则,mysql8是使用的caching_sha2_password规则安装mysql8时win2008需要安装MicrosoftVisualC++2015补丁需要自…

    2022年7月27日
    5
  • 人力资源管理中的大数据应用之道[通俗易懂]

    人力资源管理中的大数据应用之道[通俗易懂]本文来自网易云社区。随着时代的发展,计算机技术已经成为了人们生活以及日常办公必不可少的重要手段,尤其是近两年来,大数据以及云计算已经成为了企业管理的重要手段,不仅帮助企业提升业务管理,同样对于企业的人力资源管理同样起着重要的作用。从当前时代发展的角度来看,利用大数据进行人力资源分析,能够更好的帮助人力资源部门进行人员的招聘、人才的测评以及对人才进行合理的培训、管理、薪酬的配比以及员工的职业生涯…

    2022年5月27日
    38
  • TCP拥塞控制算法(Tahoe/Reno/Newreno)

    TCP拥塞控制算法(Tahoe/Reno/Newreno)TCP拥塞控制算法(Tahoe/Reno/Newreno)前言TCP(TransmissionControlProtocol),传输控制协议,是目前__Internet__上最重要的一个通信协议之一,其作用是对数据的传输进行一定的控制;而拥塞控制算法又是TCP中最重要的一个算法之一,接下来我们先来了解一下基本概念,再来详细介绍3个协议中的拥塞控制算法以及他们之间的区别。前期知识储备及名词…

    2022年6月24日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号