gpt4 book ai didi

java - ProcessBuilder 和 FileHandler 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:12 26 4
gpt4 key购买 nike

任何人都可以解释一下 ProcessBuilderFileHandler 之间的区别,在哪种情况下应该使用哪一个。

例如,如果我们要将命令的输出重定向到文本文件,例如“logfile.txt”,ProcessBuilder需要几秒钟的时间才能将输出发送到文件。

在 100 个进程必须将其输出发送到同一个“logfile.txt”的情况下,这个 FileHandler 能做什么?

有没有一种方法可以将所有一百条记录输出到相同的“logfile.txt”,而不使用ProcessBuilder<中的process.waitFor()方法?这是我的代码,但如果同时安排 100 条记录,那么 p.waitfor() 方法将无法帮助我,因为执行命令并将输出输出到每个进程的日志文件需要几秒钟,对于 100 个进程意味着需要更多时间对数据库中的所有记录执行相同命令的时间。但我的应用程序每分钟都会启动。这就是问题所在, process.waitFor() 帮助我获得准确的输出,但对于更多数量的记录意味着需要更多时间。我想要另一种方法,它不应该等待,但所有输出都应该同步附加到文件中。

while(rs1.next())
{
instance_id = rs1.getString(1);
startdate = rs1.getString(2);
starttime = rs1.getString(3);
endtime = rs1.getString(4);
enddate = rs1.getString(5);
if(presentdate.equals(startdate) || presentdate.equals(enddate))
{
if(presenttime.equals(starttime))
{
String[] s1 = new String[]{"cmd", "/c","ec2-start-instances",instance_id,">>","D:\\logfile.log"};
ProcessBuilder builder1 = new ProcessBuilder(s1);
Process p1 = builder1.start();
p1.waitFor();
}
else if(presenttime.equals(endtime))
{
String[] s1 = new String[]{"cmd", "/c","ec2-stop-instances",instance_id,">>","D:\\logfile.log"};
ProcessBuilder builder1 = new ProcessBuilder(s1);
Process p1 = builder1.start();
p1.waitFor();
}
}
}

最佳答案

它们是两个几乎不相关的对象和区域。

是的,进程生成器为我们提供了标准输出和错误输出流,可以将其保存到文件中,但也可以将其保存到数据库中或丢弃。

另一方面,ava.util.logging.FileHandler 是日志系统的附加部分。我们通常对自己的代码使用日志记录,尽管记录我们在那里调用的外部进程的输出也没有什么问题。

但是如果其他类在进程日志记录时进行日志记录,那么将会得到混合日志。

同样,如果您正在运行 50 个进程,我建议您不要登录到同一个文件。但使用 50 个线程记录 50 个不同的文件。每个线程都会检查错误和输出流,并在有新行或该流末尾时保存。

完成所有操作后,可以根据需要复制到日志文件或新文件。T

关于java - ProcessBuilder 和 FileHandler 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com