2012-04-23 51 views
0

我在Lotus Domino中運行的以下一段Java代碼存在問題。克服Java中使用文件問題

File filData = new File(domSapFilePath + "\\DOMSAP" + sdfDateTime.format((Calendar.getInstance()).getTime()) + ".csv"); 
     FileOutputStream foData = new FileOutputStream(filData); 

     foData.write(DomSapGenerator.GenerateDomSapFile(con, dateFrom, dateTo).getBytes()); 

     foData.close(); 

     con.close(); 

所創建的文件是一個UNC路徑,但是當它試圖寫入文件時,它出現了錯誤說,該文件是由另一個進程使用的可以看到下面:

error message: java.io.FileNotFoundException: \\10.XX.XX.XX\xxxxxx\XXX\DOXXXXXX22230.csv (The process cannot access the file because it is being used by another process) 

我以前從未使用Java進行過編程,而且我希望有人能夠指出我正確的方向來解決這個間歇發生的問題。

謝謝。

+1

您是否考慮過其他進程使用它的可能性?您正在寫入網絡文件,您採取了哪些步驟來確保您的Intranet上沒有其他人正在使用該文件? – 2012-04-23 10:53:21

回答

2

此問題最可能的原因是其他文件打開並正在使用它。操作系統正在阻止你寫入文件,因爲這可能會干擾「其他」的功能。

這可能是間歇性發生的,因爲「別的東西」只是偶爾使用文件。

解決的辦法是要弄清楚:

  • 什麼是使用文件,
  • 爲什麼它被鎖定它,
  • 如何協調上的文件不同的活動,以避免衝突。
1

當您試圖打開UNC路徑時,此錯誤消息的另一個原因可能是該代碼在計劃的代理中運行。

在這種情況下,與服務器\ 10.XX.XX.XX \的連接將在OS帳戶的上下文中打開,即Domino正在運行 - 通常是「SYSTEM」。由於「SYSTEM」用戶不允許與其他服務器建立網絡連接,因此公開呼叫將失敗。

解決方案:以有權建立網絡連接的另一個(AD)用戶身份運行Domino服務。

+0

謝謝大家的回答。我認爲它可能是這個共享存在的iSeries分區的備份,與文件創建衝突。我想我想知道在創建它之後是否有一種java鎖定文件的方式,以便備份過程無法鎖定它。 – eben80 2012-05-04 09:43:17