java使用linux命令_今天工作遇到问题总结(Java调用Linux命令及Linux输出乱码)

前两天应要求给某度做接口(要求今天下午2点前必须做完联调)。上周五同事才给我的文档(周六看了一天设计框架结构)。周一确认文档中不明确的需求,实现了一下程序整体框架结构。周二又写了一天好不容易搞完了(测试都没测,自己测的),结果今天早上测试环境部署时出了问题(我想这回SB了,下午就联调了啊)。还好我临危不乱,现改代码,还算是按时完成了。

都是一些Linux环境下匪夷所思的问题(看来以后还真不能在win下测试代码了,没事就得把程序放linux下测测,这次算是个教训)。

记录下问题及当时的解决方法。

1、在Java中调用并执行Linux命令时,如果部署在win下正常,但部署在linux环境下则有问题。

(1)异常:java.io.IOException: error=12, Cannot allocate memory。

代码如下:

Runtime rt = Runtime.getRuntime();

//执行tar打包命令

Process process = rt.exec("tar zcvf output/test.tar.gz all");

process.waitFor();

(2)上网搜到2条分析文章(貌似要让升级java版本至1.7):

http://fanzhibinhao.blog.163.com/blog/static/1791523120120574159616/ java.io.IOException: error=12, Cannot allocate memory

http://blog.csdn.net/chifengxin/article/details/6573134 执行Runtime.exec异常: error=12,Cannot allocate memory

(3)我今天的解决办法:

多亏了这位兄弟的blog:http://snowolf.iteye.com/blog/648652

其中介绍了多个压缩工具如tarutils和gziputils工具类。先使用tarutils归档为tar后,再使用gziputils工具压缩,就得到了.tar.gz,从而绕过了使用rt.exec()的方式。反向先用gzip解压成tar,再用tarutils解tar归档文件。而且这位兄弟的代码都是测试通过的,直接就能运行,很赞的说。

2、同上一个问题,生成文件MD5的方法:

md5sum output/test.tar.gz > output/test.md5

直接调linux的md5sum是不行的,因此先用commons工具类算出md5值,再写入文件。

3、Linux 输出中文乱码:

使用Linux Crontab定时:

30 * * * * cd /home/work/local/AIF&&~/local/jdk1.6.0_30/bin/java -jar  -Xms256m -Xmx512m  aif-1.0.0.jar >/dev/null 2>&1

即每天每小时的第30分钟时执行。此时自动执行生成的xml内容中文竟然为乱码。

但是直接在命令行手工执行:java -Xms256m -Xmx512m -jar aif-1.0.0.jar 就没有问题(这个具体啥原因还不清楚)。

这个问题一直没测出过(因为一直是手工执行),其实原因是输出xml文件时未指定utf-8编码,修改为下面后就可以了:

FileWriter fileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));

看来以后在linux系统输出文件时一定要指定UTF-8。

OK,记录下来希望对看到的人有所帮助,我先去歇歇了。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-11-28 22:00

浏览 5583

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值