Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 获取方法的结果并将其保存到变量中_Java - Fatal编程技术网

Java 获取方法的结果并将其保存到变量中

Java 获取方法的结果并将其保存到变量中,java,Java,有这样的代码,我将两个参数传递给输入,并在控制台中获得此方法的结果,我需要将结果保存在变量中并将其传递给另一个方法如何正确执行?请不要急着跟初学者一起编程,我会很乐意帮忙的。筛选方法的结果 publicstaticstringactivation(stringserialnumber,stringkeyname)抛出IOException、interruptedeexception、SQLException{ LocalDate futureDate=LocalDate.now().plusM

有这样的代码,我将两个参数传递给输入,并在控制台中获得此方法的结果,我需要将结果保存在变量中并将其传递给另一个方法如何正确执行?请不要急着跟初学者一起编程,我会很乐意帮忙的。筛选方法的结果

publicstaticstringactivation(stringserialnumber,stringkeyname)抛出IOException、interruptedeexception、SQLException{
LocalDate futureDate=LocalDate.now().plusMonths(12);
字符串formattedDate=futureDate.format(模式的DateTimeFormatter.of(“yyyyMMdd”);
字符串[]命令=
{
“cmd”,
};
进程p=Runtime.getRuntime().exec(命令);
//新线程(新同步管道(p.getErrorStream(),System.err)).start();
新线程(新同步管道(p.getInputStream(),System.out)).start();
PrintWriter stdin=新的PrintWriter(p.getOutputStream());
stdin.println(“C:\\tdes\u ecb.exe”+serialNumber+“”+keyName+“”+formattedDate);
stdin.close();
int returnCode=p.waitFor();
字符串代码=整数.toString(返回代码);
返回码;
}
静态类SyncPipe实现可运行{
公共同步管道(InputStream ISTR、OutputStream OSTM){
inputStream=istrm;
outputStream=OSTM;
}
公开募捐{
试一试{
最终字节[]缓冲区=新字节[1024];
对于(int length=0;(length=inputStream.read(缓冲区))!=-1;){
写入(缓冲区,0,长度);
StringBuilder sb=新的StringBuilder();
for(int i=0;i
要将
Runtime.getRuntime().exec(command)
的结果放入变量中,不需要单独的线程,您可以直接从对象
进程
读取它,并存储在
字符串
StringBuilder
中,在此之后,需要理解文本并根据您的规则进行拆分

要立即读取流程的结果,请执行以下操作:

final StringBuilder ret = new StringBuilder();

final Runtime rt = Runtime.getRuntime();
final String[] commands = { "cmd", "/c", "cd c:\\myuser" };

final Process proc = rt.exec(commands);

final BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
final BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

String s = null;

while ((s = stdInput.readLine()) != null) {
    ret.append(s).append("\n");
}

while ((s = stdError.readLine()) != null) {
    ret.append(s).append("<br />");
}
String res = ret.toString();

现在,您的变量
res
只有要传递给另一个方法的文本。

要将
Runtime.getRuntime().exec(command)
的结果获取到变量中,不需要单独的线程,您可以直接从对象
进程
中读取它,并将其存储在
字符串
StringBuilder
中,然后根据您的规则理解文本并将其拆分

要立即读取流程的结果,请执行以下操作:

final StringBuilder ret = new StringBuilder();

final Runtime rt = Runtime.getRuntime();
final String[] commands = { "cmd", "/c", "cd c:\\myuser" };

final Process proc = rt.exec(commands);

final BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
final BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

String s = null;

while ((s = stdInput.readLine()) != null) {
    ret.append(s).append("\n");
}

while ((s = stdError.readLine()) != null) {
    ret.append(s).append("<br />");
}
String res = ret.toString();

现在,您的变量
res
只有要传递给另一个方法的文本。

我不清楚您的需求的某些部分。如果要将子进程的输出作为主Java进程的输入,那么我认为直接通过JavaAPI是不可行的

在主Java进程中获取子进程输出的间接方法 我不确定您是否尝试过这种方法,但您可以将子进程的输出重定向到一个文件中,并在该进程结束后在同一进程中读取该文件。(当然,如果您的输出数据是敏感的,您可能不想这样做。)


我不清楚你要求的某些部分。如果要将子进程的输出作为主Java进程的输入,那么我认为直接通过JavaAPI是不可行的

在主Java进程中获取子进程输出的间接方法 我不确定您是否尝试过这种方法,但您可以将子进程的输出重定向到一个文件中,并在该进程结束后在同一进程中读取该文件。(当然,如果您的输出数据是敏感的,您可能不想这样做。)


非常感谢您的回答,但是有一个问题,exe无法启动,错误是stderrorBufferreader@837出来了非常感谢你的回答,但是有一个问题,exe没有启动,错误是stderrorBufferreader@837我需要得到这个方法的结果,然后把它传给另一个方法,但我不能将其写入文件。我需要得到该方法的结果并将其传递给另一个方法,但我不能将其写入文件。
String res = "\r\nC:\\User\\aaa\\bbb\\ccc\\tdex_ecb.exe 000000 111111 33333 44444 \r\n INFO I WANT\r\n C:\\\\User\\\\aaa\\\\bbb\\\\ccc\\\\";

res = res.substring(2);
res = res.substring(res.indexOf("\r\n")+2);
res = res.substring(0, res.indexOf("\r\n"));

System.out.println(res);
String filePath = "C:/Temp/abc.txt";

/* Create the process and redirect its output to a new file. */
ProcessBuilder pb = new ProcessBuilder().command( "C:\\Temp\\echo.bat" ) //Replace this with your command
     .redirectOutput( Redirect.to( new File( filePath ) ) );
Process p = pb.start();
p.waitFor(); //Now, wait for the process to get over...

/* Now, read from the generated file. */
List<String> lines = Files.readAllLines( Paths.get( filePath ) );
Process p = new ProcessBuilder().command( "C:\\Temp\\echo.bat" ) //Replace this with your command
        .inheritIO().start();
p.waitFor();