Java 拓展之调用其他语言
目前而言,编程语言真的是太多了。每一种都是一种智慧的结晶,但是每个都存在其缺点。网上经常能看到一些程序员争论“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.32 的 Ping 统计信息:
数据包: 已发送 = 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如何调用C语言程序,JNI技术
Java为什么要调用C语言编写的程序因为涉及操作系统底层的事件,Java是处理不了的,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流,这个事Java就做不了,只能交给C语 ...
- java web应用调用python深度学习训练的模型
之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...
- ubuntu下Java通过JNI调用C
下面看一个实例,如下: public class TestJNI { static { System.loadLibrary("diaoyong"); // 程序在加载时,自动加载 ...
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h 代码#pragma once#ifdef __cplusplusextern "C" {#e ...
- JAVA调用C语言写的SO文件
JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...
- Java JNI调用c语言的dll测试
最近复习C语言和java语言(10年没用了,温习一下),用JNI调用C语言的dll测试,以前没做过,在网上找了很多,总结如下: 环境:windows 10(64位) + JDK(32位,版本1.7.0 ...
- Java语言与C语言混合编程(2)--在Java中调用C语言本地库
在上一篇文章中介绍了Java语言中的native关键字,以及Java语言调用C语言的编译生成本地动态链接库(DLL)实现加法运算的小例子,本文通过一个更加详细的例子,深入讲解Java语言调用C语言的函 ...
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
Atitit.Js调用后台语言 java c# php swing android swt的方法大总结 1. Js调用后台语言有三种方法1 2. Swt BrowserFunction 绑定方法 ...
- Java动态调用脚本语言Groovy
Java动态调用脚本语言Groovy 2019-05-15 目录 0. pom.xml添加依赖1. 使用GroovyShell计算表达式2. 使用GroovyScriptEngine脚本引擎加载Gro ...
随机推荐
- JDBC查询优化,统计条数
JDBC查询优化分析: 现有以下查询语句: String sql1 = "select * from userinfo";// 创建语句 String sql2 = "s ...
- codevs 搜索题汇总(钻石+大师级)
1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图 ...
- cogs 619. [金陵中学2007] 传话
提交地址:http://cojs.tk/cogs/problem/problem.php?pid=619 619. [金陵中学2007] 传话 ★☆ 输入文件:messagez.in 输出文件 ...
- [HNOI 2010]Bus 公交线路
Description 题库链接 有 \(N\) 个车站, \(K\) 条公交线路.第 \(1\) 到 \(K\) 站是这 \(K\) 线路的起点站.第 \(N-K+1\) 到 \(N\) 是终点站. ...
- [POI2016]Nim z utrudnieniem
Description A和B两个人玩游戏,一共有m颗石子,A把它们分成了n堆,每堆石子数分别为a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取.谁先不能操作,谁 ...
- [SPOJ 287] Smart Network Administrator 二分答案+网络流
The citizens of a small village are tired of being the only inhabitants around without a connection ...
- 【bzoj4443 scoi2015】小凸玩矩阵
题目描述 小凸和小方是好朋友,小方给了小凸一个 nn × mm (n \leq m)(n≤m) 的矩阵 AA ,并且要求小凸从矩阵中选出 nn 个数,其中任意两个数都不能在同一行或者同一列.现在小凸想 ...
- hdu 5391 (数论)
Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
- 浅析Linux内核调度
1.调度器的概述 多任务操作系统分为非抢占式多任务和抢占式多任务.与大多数现代操作系统一样,Linux采用的是抢占式多任务模式.这表示对CPU的占用时间由操作系统决定的,具体为操作系统中的调度器.调度 ...
- 51Nod 1125 交换机器的最小代价
题目描述: 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增.移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和.例如:3 2 1,交换1 ...