簡體   English   中英

使用Rhino / Java / JavaScript的“文件正在使用”錯誤

[英]“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輸出中的一些輸入。 所以我會嘗試兩件事:

  1. 獲取流程對象並等待其完成。

     var process = java.lang.Runtime.getRuntime().exec(CmdCommand); var exitCode = process.waitFor(); // blocks until process completes 
  2. 如果僅此一項不起作用,請在腳本結尾處退出:

     java.lang.System.exit(0); 

您可以使用另外兩種方法進行較大的更改,但是如果您要以此為基礎,則可以為您提供幫助。

  1. 您可以使用java.lang.ProcessBuilder ,這是一種用於處理進程的更方便的API,它是在更高版本的Java中引入的(但無疑仍包含在您所運行的內容中)。

  2. 您可以使用Rhino的runCommand來執行此類操作。 我發現它有點小問題,但在大多數情況下都可以用。 請參閱Mozilla的Rhino shell文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM