编写一个访问系统的方法?

时间:2014-09-23 20:56:10

标签: java methods processbuilder

我正在尝试编写一个接受字符串然后可以从系统(终端)输出内容的java方法系统(" ls")。当我运行我当前的程序时,它工作并输出src / bin。但是当我添加" ls -l"程序终止,我没有输出。我一无所知,如何解决这个问题。这是我的代码。

public class getSystemInfo
{
   public static void main(String args [])
   {
       system("ls -l");
   }

public static void main(String args [])
{
    ArrayList<String> array = new ArrayList<String>();
    String s = "ls -l";
    StringTokenizer tok = new StringTokenizer(s,"-,:");
    while(tok.hasMoreTokens())
    {
        array.add(tok.nextToken());
    }


    try
    {
        Process p = new ProcessBuilder(array).redirectErrorStream(true).start();
        Scanner c = new Scanner(p.getInputStream());
        while(c.hasNext())
        {
            println(c.nextLine());
        }
        c.close();
    } catch (IOException e) {}

3 个答案:

答案 0 :(得分:0)

您可split regex上的命令(例如"-"),然后为您的命令创建适当的参数。 e.g。

private static void system(String cmd) throws IOException {
        List<String> params = new ArrayList<>();
        String[] chunks = cmd.split("-");
        params.add(chunks[0].trim());

        for (int i = 1; i < chunks.length; i++) {
            params.add("-"+chunks[i].trim());
        }

        ProcessBuilder pb = new ProcessBuilder (params);
        Process p = pb.start();
        Scanner sc = new Scanner(p.getInputStream());
        while(sc.hasNext()) {
            System.out.println((sc.nextLine()));
        }
    }

答案 1 :(得分:0)

我认为你的方向正确。尝试对空格进行标记以分隔命令名称和参数,如下所示:

StringTokenizer tok = new StringTokenizer(s," ,:");

答案 2 :(得分:0)

我发现processBuilder不接受*字符,所以我需要在我的数组前添加sh -c。

public static void main(String args [])
{
ArrayList<String> array = new ArrayList<String>();
String s = "ls -l";
StringTokenizer tok = new StringTokenizer(s,"-,:");
while(tok.hasMoreTokens())
{
    array.add("sh");
    array.add("-c");
    array.add(tok.nextToken());
}