首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java执行本地命令需要在命令执行时传入参数,怎么处理

2012-02-10 
java执行本地命令需要在命令执行时传入参数,怎么办?java的runtime.exec可以执行本地命令,如Runtime.exec(

java执行本地命令需要在命令执行时传入参数,怎么办?
java的runtime.exec可以执行本地命令,如Runtime.exec("fdisk -l");
现在执行本地命令,如给磁盘分区,需要在命令执行过程中输入分区参数来完成这个命令,
但是怎么给这个命令输入参数呢
谁做过这方面的 ,给个解决方法
谢谢了

[解决办法]
我记得这个函数可以传入String[]吧
[解决办法]
sorry 说错了,不需要。

Java code
package com.xuz.csdn.aug22;import java.io.IOException;import java.io.InputStream;public class RuntimeTest {    public static void main(String[] args) {        try {            Process process = Runtime.getRuntime().exec("netstat -an");            InputStream is = process.getInputStream();            byte[] b = new byte[1024];            int size;            while((size = is.read(b)) != -1)                System.out.println(new String(b,0,size,"GBK"));        } catch (IOException e) {            e.printStackTrace();        }    }}
[解决办法]
向 process.getOutputStream 写
看这个连接http://blog.csdn.net/Sammy_chan/archive/2007/09/09/1778064.aspx
[解决办法]
下面是很久以前写的模拟Eclipse的命令行的程序,也许对你有些帮助。
Java code
///////////////////////////////////////////////////////////////////////////////// 类Test是用来测试的,即一个进程,它要求在控制台进行输入输出, 类Terminal模拟了Eclipse的控制台./////////////////////////////////////////////////////////////////////////////// import java.util.Scanner;public class Test {    public static void main(String[] args) {        System.out.println("Hi, Console");        System.out.println("Go, Console");                System.out.println("Please input ...");        Scanner scanner = new Scanner(System.in);        String str = scanner.nextLine();        System.out.println("Your input is: " + str);    }}///////////////////////////////////////////////////////////////////////////////// 在类Terminal中有三个线程,一个用于监听proc正常的输出,一个监听proc的错误输出,一个用于// 监听用户输入到控制台的数据,然后把这个数据输出到proc里(对于proc来说是输入)/////////////////////////////////////////////////////////////////////////////// import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.util.Scanner;public class Terminal {    public static void main(String[] args) throws IOException, InterruptedException {        final Process proc = Runtime.getRuntime().exec("java Test");        // Normal input thread        new Thread() {            public void run() {                InputStream in = proc.getInputStream();                BufferedReader reader = new BufferedReader(new InputStreamReader(in));                try {                    int ch = 0;                    while ((ch = reader.read()) != -1) { // 不用readLine是为了防止print没有回车的输出                        System.out.print((char) (ch));                    }                    System.out.println("Process end.");                    // 当读取到-1时,说明proc已经结束,所以本程序也应该结束了(或者结束输出线程)                    System.exit(0);                 } catch (IOException e) {                    e.printStackTrace();                }            }        }.start();        // Error input thread        new Thread() {            public void run() {                InputStream in = proc.getErrorStream();                BufferedReader reader = new BufferedReader(new InputStreamReader(in));                String line = null;                try {                    while ((line = reader.readLine()) != null) {                        System.err.println(line);                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }.start();        // System.out.println("Sleep...");        // Thread.sleep(3000); // 程序在这里等待时,在Eclipse的控制台也能进行输入        // 当proc代表的程序结束后,Eclipse才强制在控制台不能进行输入        // Output thread.        // 在输入中按下回车后取得当前行字符(去掉传进来的,只取输入的部分),然后转对方.        new Thread() {            public void run() {                OutputStream out = proc.getOutputStream();                PrintWriter writer = new PrintWriter(out);                Scanner scanner = new Scanner(System.in);                String str = null;                while ((str = scanner.nextLine()) != null) {                    writer.println(str);                    writer.flush();                }            }        }.start();    }}///////////////////////////////////////////////////////////////////////////////// 执行方法:///////////////////////////////////////////////////////////////////////////////1. 先编译好这两个文件放在同一个文件夹里2. 在终端里执行: java Terminal3. 看终端里的提示进行操作 


[解决办法]
再说明一下,编译好Test.java和Terminal.java后,执行java Terminal,然后就会提示开始进行输入了。
Test.java不要去执行,因为它会被Terminal.java去调用执行,然后输入是在Test.java中要求的,而Terminal.java只是接管了Test.java中的输入输出请求。

可以把Test.java修改为如下,可以多进行几次输入:

Java code
import java.util.Scanner;public class Test {    public static void main(String[] args) {        System.out.println("Hi, Console");        System.out.println("Go, Console");                System.out.println("Please input ...");        Scanner scanner = new Scanner(System.in);        String str = scanner.nextLine();        System.out.println("Your input is: " + str);        str = scanner.nextLine();        System.out.println("Your input is: " + str);        str = scanner.nextLine();        System.out.println("Your input is: " + str);    }} 

热点排行