java程序中如何调用linux命令
java程序中如何调用linux指令
作为一个Java开发人员,有些常用的Linux指令必需把握。即时平常开发过程中不使用Linux(Unix)或者mac系统,也需要娴熟把握Linux指令。由于很多服务器上都是Linux系统。所以,要和服务器机器交互,就要通过shell指令。本文为大家共享的就是java程序中怎么调用linux指令。
Java调用shell
Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)供应了一个允许Java程序与该程序所运行的环境交互的接口,这就是Runtime类,在Runtime类里供应了猎取当前运行环境的接口。
其中的exec函数返回一个执行shell指令的子进程。exec函数的具体实现形式有以下几种:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我们在这里主要用到的是第一个和第四个函数,具体方法很简洁,就是在exec函数中传递一个代表指令的字符串。exec函数返回的是一个Process类型的类的实例。Process类主要用来把握进程,猎取进程信息等作用。(具体信息及其用法请参看Java doc)。
1)执行简洁的指令的方法:
代码如下:
try
String commands = ls -l;
Process process = Runtime().exec (commands);
// for showing the info on screen
InputStreamReader ir=new
InputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = adLine ()) != null){
System.out.println(line);
}//end try
catch (java.io.IOException e){
} 上面的`代码首先是声明白一个代表指令的字符串commands,
它代表了ls -l
这个指令。之后我们用Runtime().exec(commands)来生成一个子进程来执行这个指令,假如这句话运行成功,则指令ls -l 运行成功(由于没有让它显示,不会显示ls -l
的结果)。后面的流操作则是猎取进程的流信息,并把它们一行行输出到屏幕。2)执行带有参数的指令(尤其是参数需要用引号的)时则需要用String的数组来表示整个指令,而且要用转义符把引号的特殊含义去除,例如我们要执行find / -name *mysql* -print 时,用如下代码
try
String[] commands = new
String[]{find,.,-name,*mysql*,-print};
Process process = Runtime().exec (commands);
InputStreamReader ir=new
InputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = adLine ()) != null){
System.out.println(line);
}//end try
catch (java.io.IOException e){
Java 可以通过Runtime 调用Linux指令,形式如下:
但是这样执行时没有任何输出,由于调用 方法将产生一个本地的进程,并返回一个Process子类的实例(留意:Runtime().exec(command)返回的是一个Process类的实例)该实例可用于把握进程或取得进程的相关信息。
由于调用 方法所创建的子进程没有自己的终端或把握台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过OutputStream(),InputStream(),ErrorStream() 方法重定向给它的父进程了。
用户需要用这些stream来向子进程输入数据或猎取子进程的输出,下面的代码可以取到linux 指令的执行结果:
try {
String[] cmd = new String[]{'/bin/sh', "-c', ' ls "};
Process ps = Runtime().exec(cmd);
linux字符串转数组BufferedReader br = new BufferedReader(new InputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append('\n');
}
String result = sb.toString(); System.out.println(result); } catch (Exception e) {
e.printStackTrace();
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论