开发者社区> 郭璞> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java 拓展之调用其他语言

简介: 目前而言,编程语言真的是太多了。每一种都是一种智慧的结晶,但是每个都存在其缺点。网上经常能看到一些程序员争论“XX是世界上最好的语言”之类的话题。其实我们大可不必这样。语言本身只是一种工具,一种帮助我们实现自己功能的工具。
+关注继续查看

目前而言,编程语言真的是太多了。每一种都是一种智慧的结晶,但是每个都存在其缺点。网上经常能看到一些程序员争论“XX是世界上最好的语言”之类的话题。其实我们大可不必这样。语言本身只是一种工具,一种帮助我们实现自己功能的工具。我们为什么非要一棵树上吊死呢?

我不否认,使用一种语言。确实便于维护和管理。但是综合多种语言,共同完成一个项目,岂不更加高效吗?这正如一个团队项目,几个人一起做,总比一个人孤军奋战来的好吧。

下面,我就以Java语言为主,分别讨论一下如何调用其他语言来完成我们的需求。


Java 调用简单CMD

CMD作为windows平台上脚本老大哥,虽然命令很少,但是功能还是很强大的。在Java中调用外部的执行命令,只需要使用Runtime即可。


public class CMDRelative {

    public static void main(String[] args) {
        Runtime r = Runtime.getRuntime();
        System.out.println("Ready to carry CMD!");
        try {
            r.exec("cmd /k calc");
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("End to carry CMD!");
    }
}

exec方法有很多的重载,我们可以根据情况来进行调用。

Java调用CMD并实现内容的输出

要想获得CMD命令执行的反馈信息,需要借助输入流来实现。如下:

public static void callPing() {
        try {
            Process p = Runtime.getRuntime().exec("ping www.douban.com");
            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = "";
            StringBuilder sb = new StringBuilder();
            while((line=br.readLine())!=null){
                sb.append(line);
                sb.append("\n");
            }
            line = new String(sb);
            System.out.println(line.toString());
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

调用此方法之后,控制台获得的反馈信息如下:


正在 Ping www.douban.com [211.147.4.32] 具有 32 字节的数据:
来自 211.147.4.32 的回复: 字节=32 时间=29ms TTL=49
来自 211.147.4.32 的回复: 字节=32 时间=29ms TTL=49
来自 211.147.4.32 的回复: 字节=32 时间=25ms TTL=49
来自 211.147.4.32 的回复: 字节=32 时间=55ms TTL=49

211.147.4.32Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 25ms,最长 = 55ms,平均 = 34ms

如此,便可以实现Java调用CMD,并获得反馈信息。

Java调用Python

Python是一个抽象层次更高的语言,其完美的库真的是让人爱不释手啊,强大的库成就了Python。下面我们就来看一个小例子,看看Java是怎么调用Python的。使用Java调用Python的前提是有一个运行环境的支持,这里采用的是jython.jar
jython.jar下载地址

先看看Python代码吧。

print 'Hello Java.I am Python.Enjoy my funny'

from time import * 

print asctime()
print 'Begin to create one file'
wrfile = open('E:\\Code\\Java\\Test4Android\\src\\python\\Python_file','wb')
rdfile = open('E:\\Code\\Java\\Test4Android\\src\\python\\RunPython.java','rb')
content = rdfile.read()
rdfile.close()
wrfile.write(content)
wrfile.close()
print 'write file process end!'

然后是Java代码

package python;

import org.python.util.PythonInterpreter;

public class RunPython {

    public static void main(String[] args) {

        System.out.println("Begin to run python script:");

        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.execfile("E:\\Code\\Java\\Test4Android\\src\\python\\input.py");

    }

}

下面看看执行的结果:

Begin to run python script:
Hello Java.I am Python.Enjoy my funny
星期二 六月 28 19:33:56 2016
Begin to create one file
write file process end!

然后确实可以在同级的目录下,发现多了一个名为Python_file.txt的文件。打开之后,内容和RunPython.java 是一致的。

额外的话

其实今天的代码部分的分享到这里就完了,但是从这两个小例子中我们不难看出。每种语言都有其优点,我们要学会利用它们的优点,而且是发挥出它们本身最大的价值。这样才能事半功倍。单纯的依靠一种语言,恐怕效果并不一定会很好的吧。

比如,我们用Python收集数据,使用Java进行处理,使用js完善,等等吧。

其实技术上不是最困难的,真正困难的是如何打破思维僵化,打破惯性!

:-)









最后附上一个CMD命令查询表

CMD命令
1. gpedit.msc-----组策略
2. sndrec32-------录音机
3. Nslookup-------IP地址侦测器
4. explorer-------打开资源管理器
5. logoff---------注销命令
6. tsshutdn-------60秒倒计时关机命令
7. lusrmgr.msc----本机用户和组
8. services.msc---本地服务设置
9. oobe/msoobe /a----检查XP是否激活
10. notepad--------打开记事本
11. cleanmgr-------垃圾整理
12. net start messenger----开始信使服务
13. compmgmt.msc---计算机管理
14. net stop messenger-----停止信使服务
15. conf-----------启动netmeeting
16. dvdplay--------DVD播放器
17. charmap--------启动字符映射表
18. diskmgmt.msc---磁盘管理实用程序
19. calc-----------启动计算器
20. dfrg.msc-------磁盘碎片整理程序
21. chkdsk.exe-----Chkdsk磁盘检查
22. devmgmt.msc--- 设备管理器
23. regsvr32 /u *.dll----停止dll文件运行
24. drwtsn32------ 系统医生
25. rononce -p ----15秒关机
26. dxdiag---------检查DirectX信息
27. regedt32-------注册表编辑器
28. Msconfig.exe---系统配置实用程序
29. rsop.msc-------组策略结果集
30. mem.exe--------显示内存使用情况
31. regedit.exe----注册表
32. winchat--------XP自带局域网聊天
33. progman--------程序管理器
34. winmsd---------系统信息
35. perfmon.msc----计算机性能监测程序
36. winver---------检查Windows版本
37. sfc /scannow-----扫描错误并复原
38. taskmgr-----任务管理器(2000/xp/2003
39. winver---------检查Windows版本
40. wmimgmt.msc----打开windows管理体系结构(WMI)
41. wupdmgr--------windows更新程序
42. wscript--------windows脚本宿主设置
43. write----------写字板
44. winmsd---------系统信息
45. wiaacmgr-------扫描仪和照相机向导
46. winchat--------XP自带局域网聊天
47. mem.exe--------显示内存使用情况
48. Msconfig.exe---系统配置实用程序
49. mplayer2-------简易widnows media player
50. mspaint--------画图板
51. mstsc----------远程桌面连接
52. mplayer2-------媒体播放机
53. magnify--------放大镜实用程序
54. mmc------------打开控制台
55. mobsync--------同步命令
56. dxdiag---------检查DirectX信息
57. drwtsn32------ 系统医生
58. devmgmt.msc--- 设备管理器
59. dfrg.msc-------磁盘碎片整理程序
60. diskmgmt.msc---磁盘管理实用程序
61. dcomcnfg-------打开系统组件服务
62. ddeshare-------打开DDE共享设置
63. dvdplay--------DVD播放器
64. net stop messenger-----停止信使服务
65. net start messenger----开始信使服务
66. notepad--------打开记事本
67. nslookup-------网络管理的工具向导
68. ntbackup-------系统备份和还原
69. narrator-------屏幕“讲述人”
70. ntmsmgr.msc----移动存储管理器
71. ntmsoprq.msc---移动存储管理员操作请求
72. netstat -an----(TC)命令检查接口
73. syncapp--------创建一个公文包
74. sysedit--------系统配置编辑器
75. sigverif-------文件签名验证程序
76. sndrec32-------录音机
77. shrpubw--------创建共享文件夹
78. secpol.msc-----本地安全策略
79. syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
80. services.msc---本地服务设置
81. Sndvol32-------音量控制程序
82. sfc.exe--------系统文件检查器
83. sfc /scannow---windows文件保护
84. tsshutdn-------60秒倒计时关机命令
3. 84. tsshutdn-------60秒倒计时关机命令
85. tourstart------xp简介(安装完成后出现的漫游xp程序)
86. taskmgr--------任务管理器
87. eventvwr-------事件查看器
88. eudcedit-------造字程序
89. explorer-------打开资源管理器
90. packager-------对象包装程序
91. perfmon.msc----计算机性能监测程序
92. progman--------程序管理器
93. regedit.exe----注册表
94. rsop.msc-------组策略结果集
95. regedt32-------注册表编辑器
96. rononce -p ----15秒关机
97. regsvr32 /u *.dll----停止dll文件运行
98. regsvr32 /u zipfldr.dll------取消ZIP支持
99. cmd.exe--------CMD命令提示符
100. chkdsk.exe-----Chkdsk磁盘检查
101. certmgr.msc----证书管理实用程序
102. calc-----------启动计算器
103. charmap--------启动字符映射表
104. cliconfg-------SQL SERVER 客户端网络实用程序
105. Clipbrd--------剪贴板查看器
106. conf-----------启动netmeeting
107. compmgmt.msc---计算机管理
108. cleanmgr-------垃圾整理
109. ciadv.msc------索引服务程序
110. osk------------打开屏幕键盘
111. odbcad32-------ODBC数据源管理器
112. oobe/msoobe /a----检查XP是否激活
113. lusrmgr.msc----本机用户和组
114. logoff---------注销命令
115. iexpress-------木马捆绑工具,系统自带
116. Nslookup-------IP地址侦测器
117. fsmgmt.msc-----共享文件夹管理器
118. utilman--------辅助工具管理器
119. gpedit.msc-----组策略
120. explorer-------打开资源管理器

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Java从入门到精通》“循环结构 “拓展习题
《Java从入门到精通》“循环结构 “拓展习题
0 0
Android(Java) | 如何使程序实现线程安全(拓展分析:ThreadLocal、重排序、volatile/final)
Android(Java) | 如何使程序实现线程安全(拓展分析:ThreadLocal、重排序、volatile/final)
0 0
【Java项目总结】设计阶段提高项目的拓展性
分享Java项目设计的相关技巧!
0 0
Android/Java中解析.crt证书文件的公钥(public key)---Android拓展篇
Android/Java中解析.crt证书文件的公钥(public key)---Android拓展篇
0 0
Java数组篇03——数组的使用及拓展
Java数组篇03——数组的使用及拓展
0 0
Java数组篇02——数组初始化及拓展
Java数组篇02——数组初始化及拓展
0 0
netty案例,netty4.1中级拓展篇三《Netty传输Java对象》
Netty在实际应用级开发中,有时候某些特定场景下会需要使用Java对象类型进行传输,但是如果使用Java本身序列化进行传输,那么对性能的损耗比较大。为此我们需要借助protostuff-core的工具包将对象以二进制形式传输并做编码解码处理。与直接使用protobuf二进制传输方式不同,这里不需要定义proto文件,而是需要实现对象类型编码解码器,用以传输自定义Java对象。
0 0
Java程序员如何正确地学习新的知识,拓展自己的技术栈
我的方法可能并不完全适合你,但是,我觉得这至少是我经过实践后认为比较靠谱的一种方法论。 定个目标 & 自我驱动 我不知道此刻正在看文章的你,目前处于人生的哪个阶段。
983 0
【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
多维数组声明数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的。同理,声明三维数组时需要三对中括号,中括号的位置可以在数据类型的后面,也可以在数组名称的后面,其它的依次类推。
990 0
+关注
郭璞
一切就交给时间,它会给我答案。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JAVA 应用排查全景图
立即下载
Java工程师必读手册
立即下载
Java应用提速(速度与激情)
立即下载