Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java代码启动filebeat?_Java_Powershell_Processbuilder_Filebeat - Fatal编程技术网

使用Java代码启动filebeat?

使用Java代码启动filebeat?,java,powershell,processbuilder,filebeat,Java,Powershell,Processbuilder,Filebeat,我正在使用filebeat读取一些日志文件,我需要使用Java程序启动filebeat。使用Windows PowerShell执行filebeat命令。我使用了以下代码,但它不起作用 试试看{ ProcessBuilder b1=新的ProcessBuilder(“powershell.exe”、“/c”、“cd\”c:\\Program Files\\Filebeat\”&./Filebeat-e-c Filebeat.yml-d\”publish\“\”; b1.重定向错误流(真); 进程

我正在使用filebeat读取一些日志文件,我需要使用Java程序启动filebeat。使用Windows PowerShell执行filebeat命令。我使用了以下代码,但它不起作用

试试看{
ProcessBuilder b1=新的ProcessBuilder(“powershell.exe”、“/c”、“cd\”c:\\Program Files\\Filebeat\”&./Filebeat-e-c Filebeat.yml-d\”publish\“\”;
b1.重定向错误流(真);
进程p1=b1.start();
BufferedReader r1=新的BufferedReader(新的InputStreamReader(p1.getInputStream());
字符串行1;
while(true){
line1=r1.readLine();
如果(line1==null){break;}
系统输出打印项次(第1行);
}
}捕获(例外e){
}
你弄糊涂了。后者有一个参数
/c
,前者没有。另外,您不应该在命令行中使用
cd
,而应该在
ProcessBuilder
对象上设置工作目录,并且命令行的每个标记都应该是一个单独的数组元素

将您的代码更改为类似这样的代码,它将实现您期望的功能:

ProcessBuilder b1=newprocessbuilder(“cmd.exe”、“/c”、“filebeat”、“-e”、“-c”、“filebeat.yml”、“-d”、“\“publish\”);
b1.目录(新文件(“C:\\Program Files\\Filebeat”);
b1.重定向错误流(真);
进程p1=b1.start();
以下代码有效

        ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Filebeat\\filebeat.exe", "-c", "C:\\Program Files\\Filebeat\\filebeat.yml", "-e");
        pb.redirectErrorStream(true);
        Process p = pb.start();

        BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line;
        while ((line = bri.readLine()) != null) {
           System.out.println(line);
        }
        p.waitFor();

试试这个:
“powershell.exe/c\”c:\\Program Files\\Filebeat\Filebeat.exe“-e-c\”c:\\Program Files\\Filebeat\\Filebeat.yml\”
太棒了。当我使用上面的代码时,编译器显示了这样一个错误。“类型ProcessBuilder中的方法目录(文件)不适用于参数(字符串)”。显然
directory()
需要一个
File
对象。请参阅更新的答案。