JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--Java API  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
Java技巧:使用Runtime.exec重定向本地程序调用
作者:未知     文章来源:www.jspcn.net
访问次数:1243次     加入时间:2005年01月19日
Java技巧:使用Runtime.exec重定向本地程序调用

作者: BUILDER.COM

Tuesday, December 31 2002 11:58 AM

Java具有使用Runtime.exec对本地程序调用进行重定向的能力,但是用重定向或者管道进行命令调用将会出错。解决这一问题的办法是通过命令shell运行命令。在Java中调用本地程序会破坏平台独立性规则,但是经常需要这么做才行。



以下是一个简单类的范例,展示了在Unix下运行ls命令的情形:



import java.io.BufferedInputStream;

import java.io.IOException;



public class ExecLs {



static public void main(String[] args) {

String cmd = "ls"



try {

Process ps = Runtime.getRuntime().exec(cmds);

System.out.print(loadStream(ps.getInputStream()));

System.err.print(loadStream(ps.getErrorStream()));

} catch(IOException ioe) {

ioe.printStackTrace();

}

}



// read an input-stream into a String

static String loadStream(InputStream in) throws IOException {

int ptr = 0;

in = new BufferedInputStream(in);

StringBuffer buffer = new StringBuffer();

while( (ptr = in.read()) != -1 ) {

buffer.append((char)ptr);

}

return buffer.toString();











}



}



上述代码中重要的部分是exec方法和命令字符串ls。本程序将输出运行目录下的列表细节。



那么,如果你想重定向这些细节内容到文件该怎么办?这一命令行的输入应该写成ls > FILE,但是当你将cmd变量改变成这样的话,运行就会出错,如下:



/bin/ls: >: No such file or directory

/bin/ls: FILE: No such file or directory



出错的原因在于额外的参数被直接传送到了ls命令而不是送到实际的命令行。解决这一问题的办法是将cmd串弄成一个字符串数组,并且将你想运行的程序传送到命令shell。



因此,将cmd行改成下面的样子:



String[] cmd = { "sh", "-c", "ls > FILE" };



你将得到一个名为FILE的文件,里面是目录列表。-c参数是告诉它读取随后的字符串,而最后的参数是你要运行的脚本。



在这种情况下,管道也运行良好,所以你可以把命令改成下面的方式:



String[] cmd = { "/bin/sh", "-c", "/bin/ls | grep d > FILE" };



这种形式将给你一个名为FILE的文件,里面是ls条目中包含d的条目。给出sh和ls的全路径有利于提供你的程序的安全性。



虽然使用Runtime.exec不是创建独立于平台的Java的最佳方式,但是有些时候是必要的。使用这种重定向技术有助于走出Runtime.exec的限制。

原作者: BUILDER.COM
原出处: BUILDER.COM
 
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号