今天工作遇到问题总结(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,记录下来希望对看到的人有所帮助,我先去歇歇了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值