我正在尝试编写一个接受字符串然后可以从系统(终端)输出内容的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) {}
答案 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());
}