0

嗨,我正在使用此代码运行 shell 脚本。问题是我想在运行程序时传递参数“trng-java”。像这样

like java Classname trng-java

代码:

import java.io.*;

public class Test
{


public static void main(String[] args)
{
    try {
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec(new String[]{"/bin/sh", "/tmp/test.sh", "trng-java"});

        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        String line = "";
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
    } 
    catch (Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }
}
}

这个怎么做?

4

6 回答 6

5

您传入的参数将在 args 参数中作为 String yourParam = args[0] 找到

于 2013-06-03T12:29:56.313 回答
3

命令行参数在 String[] 参数 args 中传递给您的应用程序,因此您应该能够使用args[0].

Process pr = rt.exec(new String[]{"/bin/sh", "/tmp/test.sh", args[0] });
于 2013-06-03T12:31:33.813 回答
2

Process pr = rt.exec(new String[]{"/bin/sh", "/tmp/test.sh", args[0]});

当然,您还需要检查 args 是否包含至少一个参数

于 2013-06-03T12:32:00.557 回答
2

当您将参数传递给 java 应用程序时,它们可以通过args[]main 中的数组进行访问。

请参阅:http : //docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html我引用的是:

呼应命令行参数

Echo 示例将其每个命令行参数单独显示在一行中:

public class Echo {
    public static void main (String[] args) {
        for (String s: args) {
            System.out.println(s);
        }
    }
}

以下示例显示了用户如何运行 Echo。用户输入以斜体显示。

java Echo Drink Hot Java
Drink
Hot
Java

解析数值命令行参数

如果应用程序需要支持数字命令行参数,它必须将表示数字(例如“34”)的字符串参数转换为数值。这是一个将命令行参数转换为 int 的代码片段:

int firstArg;
if (args.length > 0) {
    try {
        firstArg = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.err.println("Argument" + " must be an integer");
        System.exit(1);
    }
}
于 2013-06-03T12:33:33.440 回答
0

只需将参数添加到您的命令中,如下所示:

rt.exec("/bin/sh /tmp/test.sh trng-java");
于 2013-06-03T12:31:24.180 回答
0

public static void main(String[] args)args 参数中是参数。如果您使用多个争论,例如

java Classname a b c

然后在你的主要方法 args 将是一个包含 a,b,c 的数组

如果这是您想要的,那么这args[0]是首选的论点。

于 2013-06-03T12:31:42.227 回答