`

java调用shell并传参

阅读更多
<p>这段时间项目中出现一个问题---下载服务器(linux)上的xml文件(通过ftp协议),若文件很大(至少3G)加上宽带窄的话就出现下载失败,就是不失败,下载的时间也非常的长</p>
<pre>     老大让解决这个问题.     刚接触到这个问题时迷茫 项目也是刚接触(我是新人)  linux从没碰过 不知道如何下手 ftp协议本身没哟压缩文件的指令  在网上以及问同事  得到两个解决方案:</pre>
<p>  第一:写shell脚本 用telnet链接远程服务器 找到待压缩文件然后压缩  在下载压缩后的文件</p>
<p>  第二:在项目中下载文件用的是common-net.jar,就想着能不能重载此jar包中的下载文件的放在,在下载前加入压缩文件的代码,让其内部先压缩在下载</p>
<p> </p>
<p>根据项目的要求及其他客观原因我选择了第一方案.</p>
<p>不说这么多废话了  下面就说下我在这个过程中遇到的问题 希望对大家有所帮助</p>
<p> </p>
<p> 首先是编写shell脚本(网上一大堆资料) ,我写的shell脚本不能执行,但把里面的命令复制在黑窗口中可以执行.   <span style="color: #ff6600;"> 原因是我在window下编写的shell,是dos格式的,放到linux下当然不能执行了, 你可以先把它转换成unix格式在执行,也可以通过指令转码.  指令是: dos2unix shellName.sh  </span></p>
<p>  shell如下: </p>
<pre name="code" class="java"> #!/bin/sh     //必须的
(sleep 1
    echo "ftpuser"  //用户名
sleep 1
    echo "ftpuser"   //密码
sleep 1
    echo "cd /export/home/omc/var/fileint/cm/autoExport/"  //待压缩文件路径
sleep 1
    echo "zip /tmp/zipXmlFile.zip $*"   //压缩文件  $* 指所有传来的参数
sleep 1
    echo "exit"       //断开链接
)|telnet 11.12.13.163    // telnet链接到指定ip    注:()表示里面是一个整体

</pre>
<p>  </p>
<p><span style="background-color: #ffffff; color: #3366ff;"> 后面接着  java调用shell并传参&lt;2&gt;</span></p>
<p> </p>

接着shell脚本以及java调用shell并传参

在者就是java中怎样调用shell脚本 及怎样给shell传参

网上找到好几种写法(实质都是Runtime.getRuntime().exec();方法不同重载形式):

第一&gt;&gt;&gt;&gt;:String[] cmd = new String[length];

cmd[0] = "./shllName.sh";

for(int i =0; i &gt;&gt;:Sring[] cmd = {"/bin/sh/", "-c", "parma1", "param2"....};

第三&gt;&gt;&gt;: 把调用shell及参数直接写在放在中即 Process pcs = Runtime.getRuntime().exec("sh shellName.sh 'param1' 'param2'...");

注:参数用单引号引起来,可以防止参数中有空格和特殊字符导致不能压缩

Process pcs = Runtime.getRuntime().exec(cmd);

//若不加这下面的代码也调不成功shell脚本 ???

InputStreamReader ir = new InputStreamReader(pcs.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line = null;
while ((line = input.readLine()) != null){
System.out.println(line);
}
if(null != input){
input.close();
}
if(null != ir){
ir.close();
}

int extValue = pcs.waitFor(); //返回码 0 表示正常退出 1表示异常退出



以上三种方式开始都可以 但不知怎么的第一 第二 都出现了问题

第一种直接不能调了 老是报 cannot execute ....

第二种传不进参数  可以调shell脚本 但传不进参数

我用的第三中 把所有的参数链接成一个大字符串 (此时的shell脚本放在和项目同目录下,放在其他目录也报第一种的异常)

报不能调用shell异常 可能是shell的路径问题 到现在也没整明白???       要是把路径写的不对吧  它会直接包shell文件 not found   不报此错误 说明它能找到shell文件  但有不能调用  唉...   高手看到能解决了说下哈 小弟感激....

<p>
以上问题的解决方案: 在路径前加上sh  即: sh /opm/ote/test/shell.sh  若后面有参数,就以字符串数组的形式加入
</p>
分享到:
评论

相关推荐

    java 调用 powershell 并传参 返回

    java 调用 powershell 并传参 返回

    java调用shell(包含有参数的调用)

    总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...

    java调用shell向DataX传参,带where条件,特殊字符

    Java调用Shell脚本执行DataX任务是一种常见的数据迁移或同步操作。DataX是阿里巴巴开源的数据同步工具,它支持多种数据库之间的数据迁移。在实际应用中,我们可能需要根据特定的业务逻辑,如where条件,来定制数据...

    java调用shell向DataX传递参数,where条件,包含特殊字符

    本问题聚焦于如何通过Java调用shell脚本,向DataX传递参数,特别是包含特殊字符的where条件。在实际操作中,这可能会涉及到字符串转义、参数安全传递以及shell命令的构建等多个技术点。 首先,我们需要理解DataX的...

    js直接调用exe传参

    实现JS直接调用exe并传参主要依赖于以下几种技术和方法: 1. **使用`Process.Start`方法**:这是一种较为直接的方法,可以在.NET框架中使用。但在纯前端环境中不可行。 2. **利用`ActiveXObject`对象**:这种方法...

    Java调用shell脚本解决传参和权限问题的方法

    Java调用shell脚本解决传参和权限问题的方法 Java调用shell脚本解决传参...Java调用shell脚本解决传参和权限问题的方法可以通过将shell命令或脚本和参数放入一个数组中,并在执行脚本之前赋予脚本执行权限来解决问题。

    调用codesoft案例

    本文档旨在解析一个Java程序如何通过调用Codesoft(一种专业的标签设计与打印软件)来实现文档打印功能的具体案例。该案例提供了完整的代码片段,并对关键部分进行了注释以便于理解。 #### 二、环境搭建与依赖 在...

    文摘标题:JAVA带参数调用KETTLE远程服务执行任务

    本资源主要内容包括(资源有保证,都是干货,一看就会): ...2.JAVA传参调用KETTLE远程服务执行任务实现过程及注意事项说明。 3.附件包括:配套说明文档、代码包、KETLLE任务测试文件及数据库脚本。

    shell命令调用http接口(curl方式)

    简单介绍一下通过shell命令调用http接口(curl方式)先上样例样例介绍参数详解 先上样例 1、curl -H Content-Length:0 -X GET http://127.0.0.1:8080 2、curl -H Content-Type: application/json -H connection:Keep...

    java打开QQ聊天窗口

    这通常需要用到JNI(Java Native Interface),编写C或C++的本地库,并通过Java调用来实现。这种方式较为复杂,需要对Windows API有深入理解,同时也增加了跨平台的难度。 另一种可能的方式是使用QQ提供的消息接口...

    Shell脚本通过参数名传递参数的实现代码

    它允许我们定义短参数(单字符)和长参数(多字符)形式,使得脚本的调用更接近常规的Linux命令行工具。 以下是一个使用`getopts`实现参数名传递的示例脚本: ```bash #!/bin/bash # 定义参数及其对应的变量 in_...

    大数据开发指南(实际项目)

    - **1.11.1 调用 Shell 命令**:通过 workflow 调用外部 Shell 命令来执行特定任务。 - **1.11.2 调用 Java 代码**:在 workflow 中调用自定义的 Java 代码,实现更复杂的逻辑。 #### 二、Java 开发 DEMO 在 Java ...

    android:scheme 通过uri跳转到APP应用指定Activity

    此外,为了提供更好的用户体验,我们还可以在Activity中添加错误处理,当用户未安装我们的应用时,通过`adb shell am start -W -a android.intent.action.VIEW -d "myapp://..."`命令测试URI是否能正确跳转。...

Global site tag (gtag.js) - Google Analytics