0
点赞
收藏
分享

微信扫一扫

今天工作遇到问题总结(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



执行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 条评论