如何在Java中为ProcessBuilder分解参数?

问题描述

我正在尝试在Java中使用ProcessBuilder,但我不太了解如何拆分其参数。例如,此命令+自变量Imgcodecs.imread("/resources/images/test.png",Imgcodecs.IMREAD_GRAYSCALE)。以下是几个不同的参数拆分,但没有一个给我正确的结果。知道我在参数拆分中做错了什么吗?

find . -name 'rc*'

编辑

当我尝试添加.inheritIO()并拆分所有参数时,此操作部分起作用,这是我获得了权限被拒绝的文件的打印输出

//This is obvIoUs error since I mixed arugments with the command
processBuilder.command("find . -name 'rc*'").directory(new File("/etc"))

//Gives me exit code 1 and no results
processBuilder.command("find",". -name 'rc*'").directory(new File("/etc"))

//Gives me also exit code 1 and no results
processBuilder.command("find",".","-name","'rc*'").directory(new File("/etc"))

//Gives me also exit code 1 and no results
processBuilder.command("find",". -name","-name 'rc*'").directory(new File("/etc"))

但是像以前一样,它没有列出我的其他“ rc”文件

processBuilder.command("find",". -name 'rc*'").directory(new File("/etc")).inheritIO();

我的过程和打印输出部分

Listing all rc files in /etc directory: 
//Here should be at least dozen files that print out when I use the command in terminal
Exit code: 1
find 'someFileName': Permission denied
find 'someFileName': Permission denied
find 'someFileName': Permission denied

第二编辑

问题是,如果我将ProcessBuilder命令更改为类似的命令(我想),那么它将以相同的代码打印出没有问题的结果文件-即,我将命令更改为Process b; b.processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(b.getInputStream())); String line = ""; while((line = reader.readLine()) != null){ System.out.println(line); } >

ls -a

解决方法

启动是从Java开始的,因此不需要使用单引号转义find参数rc*。诸如bash之类的shell会将rc*扩展为当前目录中带有“ rc”前缀的实际文件(并使用错误的搜索值),但是Java不会这样做。同样,每个参数都必须位于其自己的字符串中:

processBuilder.command("find",".","-name","rc*").directory(new File("/etc"));

processBuilder.command("find","/etc","rc*");

如果find报告很多错误,则可能会出现进程冻结的问题,因为您没有与STDOUT同时读取STDERR。您可以在正在运行的线程之间进行选择以使用流,或者重定向STDERR-> STDOUT,或者在调用Process.redirectOutput(File)之前使用Process.redirectError(File)processBuilder.start()将两个流或合并的流发送到文件。 Read this answer

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...