Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > java调用本地命令
【标  题】:java调用本地命令
【关键字】:java
【来  源】:http://blog.csdn.net/aqiao95/archive/2007/04/19/1570342.aspx

java调用本地命令

Your Ad Here

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的限制。 
 

因小失大切莫轻视JAVA异常处理:【上一篇】
IT开发人才:【下一篇】
【相关文章】
  • 因小失大切莫轻视JAVA异常处理
  • 约瑟夫环的java实现
  • Java EE 6 草案提交, 新特性一览
  • Java 关键字 native 说明
  • 利用java反射机制进行对象操作
  • 使用Simian检查Java项目中冗余代码
  • java中的abstract class和interface(1)
  • java中的abstract class和interface(2)
  • JavaBean的作用范围
  • Java Web层的下一个王者是谁?
  • 【随机文章】
  • J2ME手机与服务器交互的一个Bean
  • 啃C
  • 索引与Null值对于Hints及执行计划的影响
  • 保护你的DLL和Code不被别人使用 -C#篇
  • 免费大餐今犹在!特色短信网站巡礼
  • 秋日游圆明园
  • 让每一个项目都能给我们点什么
  • lighttpd 1.4.11 mod_ssi 补丁
  • python小代码(二)
  • MC++D--Detecting Convertibility and Inheritance at
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.