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();