<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并传参<2></span></p>
<p> </p>
接着shell脚本以及java调用shell并传参
在者就是java中怎样调用shell脚本 及怎样给shell传参
网上找到好几种写法(实质都是Runtime.getRuntime().exec();方法不同重载形式):
第一>>>>:String[] cmd = new String[length];
cmd[0] = "./shllName.sh";
for(int i =0; i >>:Sring[] cmd = {"/bin/sh/", "-c", "parma1", "param2"....};
第三>>>: 把调用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调用shell 包含简单的编写shell文件 调用含有参数的shell文件
java调用shell命令,在shell命令中调用DataX任务并传递参数。 坑主要在DataX传递参数涉及到特殊字符应该如何处理这块,有时间可以自己试; 没时间可以用我的经验,自己选择;
java调用shell命令.pdf
java实现调用httpclient接口的类和方法,包括了get和post传参方式,简单易懂
java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本
java调用shell向DataX传递参数,where条件,包含特殊字符。java调用shell向DataX传递参数,where条件,包含特殊字符
在html页面用js调用exe文件并传参
C#调用C++,C++调用Python并传参,包括C++向python传递图片数据,C++向python传递组数据,C++向python传递字符串数据,C++向python传递结构体数据,C++初始化python类数据并调用方法,实际案例,能直接运行,需要安装...
shell脚本调用python脚本,并传参。 本文以删除指定文件夹下,以当前时间为基准 的指定天数以前的文件,包括空文件夹
java调用shell
java调用shell的ganymed-ssh2-build210.jar和调用方法的工具类
解决有java调用shell脚本需求的童鞋们,包含一些调用的测试方法,有问题可留言回复。
android中js与java间函数相互调用demo,绝对开源运行,并且解决了中文作为参数传递乱码问题。
Java语言后台实现调用url路径并传参。
c#调用c++ dll 传参 string 崩溃的一种解决办法
在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell...
我们选择后一种,即当完成外币资金的调度工作后,用Java的OutputStreamWriter来生成一个Txt文件,然后用Java来调用Shell脚本,在Shell脚本中完成FTP文件到Kondor系统的工作。
今天小编就为大家分享一篇关于Java调用shell脚本解决传参和权限问题的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧