[英]“File In use” error using Rhino/Java/JavaScript
我正在使用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"';
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中引入的(但無疑仍包含在您所運行的內容中)。
您可以使用Rhino的runCommand
來執行此類操作。 我發現它有點小問題,但在大多數情況下都可以用。 請參閱Mozilla的Rhino shell文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.