&引用;“正在使用的文件”;使用Rhino/Java/JavaScript时出错
我正在使用Rhino,我有以下函数调用PowerShell,比较两个文本文件并将差异保存到一个文本文件中&引用;“正在使用的文件”;使用Rhino/Java/JavaScript时出错,java,javascript,powershell,rhino,Java,Javascript,Powershell,Rhino,我正在使用Rhino,我有以下函数调用PowerShell,比较两个文本文件并将差异保存到一个文本文件中 function RunPowerShell() { var CommandPS= ' $File1 = Get-Content "C:\\Test\\test1.txt"; $File2= Get-Content "C:\\Test\\test2";Compare-Object $File1 $File2 -PassThru >"C:\\Test\\Results.txt"';
function RunPowerShell()
{
var CommandPS= ' $File1 = Get-Content "C:\\Test\\test1.txt"; $File2= Get-Content "C:\\Test\\test2";Compare-Object $File1 $File2 -PassThru >"C:\\Test\\Results.txt"';
println(CommandPS);
var CmdCommand= 'cmd /c PowerShell '+ CommandPS;
var CmdResults= new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec(CmdCommand).getErrorStream()));
CmdResults.close();
}
RunPowerShell();
该功能工作正常;文件Results.txt已创建,但我无法删除它,因为正在使用
我将在最后关闭BufferedReader,但我仍然无法删除该文件,除非我从任务管理器中终止该进程
提前感谢,Runtime.exec()不会阻塞:它派生一个异步运行的进程。因此,在进程终止之前,您可能已经到达了脚本的末尾
我不确定为什么需要终止进程才能退出,但我猜您需要使用PowerShell输出中的一些输入。所以我想尝试两件事:
var process = java.lang.Runtime.getRuntime().exec(CmdCommand);
var exitCode = process.waitFor(); // blocks until process completes
java.lang.System.exit(0);
java.lang.ProcessBuilder
,这是一种更方便的处理流程的API,在java的更高版本中引入(但毫无疑问,它仍然包含在您正在运行的程序中)runCommand
,它旨在完成这类工作。我发现它有点小毛病,但在大多数情况下效果都很好。看