Linux环境下怎么调用命令 我要用Java开发一个程序,Linux下运行的。其中会调用一个Linux下运行的程序,只要输入“hats”就可以,我如何在Java中调用它。运行那程序后会进入它的运行环境并等你输入指令,请高手指教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 new ProcessBuilder("hats").start(); 用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式: ... Process process = Runtime.getRuntime().exec(".\\p.exe"; process.waitfor( ); ... 在上面的程序中,第一行的“.\\p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。 但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况: 1、执行DOS的内部命令 如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如,执行dir命令,在NT上, 可写成exec("cmd.exe /c dir",在windows 95/98下,可写成“command.exe /c dir”,其中参数“/c”表示命令执行后关闭Dos立即关闭窗口。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序中写成exec("my_dir.bat"。如果仅仅写成exec("dir",Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器。后一种方法则不需要做更多的处理。 2、打开一个不可执行的文件 打开一个不可执行的文件,但该文件存在关联的应用程序,则可以有两种方式。 以打开一个word文档a.doc文件为例,Java中可以有以下两种写法: exec("start .\\a.doc"; exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc"; 显然,前一种方法更为简捷方便。 3、执行一个有标准输出的DOS可执行程序 在windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。程序模型如下: ... String ls_1; Process process = Runtime.getRuntime().exec("cmd /c dir \\windows"; BufferedReader bufferedReader = new BufferedReader( \ new InputStreamReader(process.getInputStream()); while ( (ls_1=bufferedReader.readLine()) != null) System.out.println(ls_1); process.waitfor( ); ... 程序示例:CODE:[Copy to clipboard]package test; /*** Add one sentence class summary here.* Add class description here.** @author lxx* @version 1.0, 2004-11-16*/public class TestCmd { public TestCmd(){} /* public void main(String args[]){ try { Process process = Runtime.getRuntime().exec("cmd.exe /c start http://www.chinaunix.com"); //登录网站 Process process = Runtime.getRuntime().exec("cmd.exe /c start ping 61.135.136.122"); //调用Ping命令 }catch (Exception e) { e.printStackTrace(); } } } *///在项目下建立一个名为hello的文件夹 public static void main(String[] args) { System.out.println(System.getProperty("user.dir")); createFolder("hello"); } private static void createFolder(String folderName) { String temp = System.getProperty("user.dir") + java.io.File.separator+ folderName; java.io.File f = new java.io.File(temp); f.mkdirs(); }}在Java程序中获取当前运行程序的路径import java.io.*;public class Test { public static void main(String[] args) { File directory = new File("."); try { File newPath = new File(directory.getCanonicalPath()+"NewFolder"); newPath.mkdir(); }catch(Exception exp) { exp.printStackTrace(); } }}//File directory = new File(".");//directory.getCanonicalPath();取得当前路径在Jsp页面中调用Ping命令---PingIP.jsp<%@ page language="java" contentType="text/html; charset=gb2312" import="java.io.*" %>;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">;<html>;<head>;<title>;Ping IP测试页面</title>;</head>;<body>;<div align="center">; <h2>;Ping IP测试页面</h2>;</div>; <% Runtime runtime = Runtime.getRuntime(); Process process =null; String line=null; InputStream is =null; InputStreamReader isr=null; BufferedReader br =null; String ip="www.sina.com.cn"; //待Ping的地址 try { process =runtime.exec("ping "+ip); is = process.getInputStream(); isr=new InputStreamReader(is); br =new BufferedReader(isr); out.println("<pre>;"); while( (line = br.readLine()) != null ) { out.println(line); out.flush(); } out.println("</pre>;"); is.close(); isr.close(); br.close(); } catch(IOException e ) { out.println(e); runtime.exit(1); } %>; </body>;</html>; 怎么把图片转换为字节数组。 求看看这道面试题目 j2ssh小问题,请高手指点。 <script>alert('ffff')</script> 两个catch子句都能捕捉一个try子句的异常,是不是很难? 请教一个错误捕捉的问题 java中如何调用方法,格式化本地硬盘,给个示例,谢谢:) 这样的程序怎么写?(很急) 如何处理applet 中文显示问题?? 自学,想了这问题一天后无果;求指导 关于凯撒加密的算法?求助中... 本机运行没问题,传到服务器applet总提示noClassDefFoundError???
...
Process process = Runtime.getRuntime().exec(".\\p.exe";
process.waitfor( );
...
在上面的程序中,第一行的“.\\p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。
但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况:
1、执行DOS的内部命令
如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如,执行dir命令,在NT上, 可写成exec("cmd.exe /c dir",在windows 95/98下,可写成“command.exe /c dir”,其中参数“/c”表示命令执行后关闭Dos立即关闭窗口。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序中写成exec("my_dir.bat"。如果仅仅写成exec("dir",Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器。后一种方法则不需要做更多的处理。
2、打开一个不可执行的文件
打开一个不可执行的文件,但该文件存在关联的应用程序,则可以有两种方式。 以打开一个word文档a.doc文件为例,Java中可以有以下两种写法:
exec("start .\\a.doc";
exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc";
显然,前一种方法更为简捷方便。
3、执行一个有标准输出的DOS可执行程序
在windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。程序模型如下:
...
String ls_1;
Process process = Runtime.getRuntime().exec("cmd /c dir \\windows";
BufferedReader bufferedReader = new BufferedReader( \
new InputStreamReader(process.getInputStream());
while ( (ls_1=bufferedReader.readLine()) != null)
System.out.println(ls_1);
process.waitfor( );
...
程序示例:
CODE:[Copy to clipboard]package test; /**
* Add one sentence class summary here.
* Add class description here.
*
* @author lxx
* @version 1.0, 2004-11-16
*/
public class TestCmd {
public TestCmd(){}
/* public void main(String args[]){
try {
Process process = Runtime.getRuntime().exec("cmd.exe /c start http://www.chinaunix.com"); //登录网站
Process process = Runtime.getRuntime().exec("cmd.exe /c start ping 61.135.136.122"); //调用Ping命令
}catch (Exception e)
{
e.printStackTrace();
}
}
} *///在项目下建立一个名为hello的文件夹
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
createFolder("hello");
} private static void createFolder(String folderName) {
String temp = System.getProperty("user.dir") + java.io.File.separator+ folderName;
java.io.File f = new java.io.File(temp);
f.mkdirs();
}}在Java程序中获取当前运行程序的路径import java.io.*;public class Test { public static void main(String[] args) { File directory = new File("."); try { File newPath = new File(directory.getCanonicalPath()+"NewFolder"); newPath.mkdir(); }catch(Exception exp) { exp.printStackTrace(); } }}//File directory = new File(".");//directory.getCanonicalPath();取得当前路径
在Jsp页面中调用Ping命令---PingIP.jsp<%@ page language="java" contentType="text/html; charset=gb2312" import="java.io.*" %>;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">;
<html>;
<head>;
<title>;Ping IP测试页面</title>;
</head>;<body>;
<div align="center">;
<h2>;Ping IP测试页面</h2>;
</div>; <%
Runtime runtime = Runtime.getRuntime();
Process process =null;
String line=null;
InputStream is =null;
InputStreamReader isr=null;
BufferedReader br =null;
String ip="www.sina.com.cn"; //待Ping的地址
try
{
process =runtime.exec("ping "+ip);
is = process.getInputStream();
isr=new InputStreamReader(is);
br =new BufferedReader(isr);
out.println("<pre>;");
while( (line = br.readLine()) != null )
{
out.println(line);
out.flush();
}
out.println("</pre>;");
is.close();
isr.close();
br.close();
}
catch(IOException e )
{
out.println(e);
runtime.exit(1);
}
%>; </body>;
</html>;