克服Java中的使用文件问题

时间:2012-04-23 10:45:20

标签: java file locking lotus lotus-domino

我在Lotus Domino中运行的以下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编程,我希望有人可以指出我正确的方向来解决这个问题,这个问题会间歇性地发生。

谢谢。

3 个答案:

答案 0 :(得分:2)

此问题最可能的原因是其他文件已打开并正在使用它。操作系统阻止您写入文件,因为这可能会干扰“别的”正在做的事情。

可能是间歇性地发生,因为“其他东西”偶尔只使用该文件。

解决方案是弄明白:

  • 正在使用该文件,
  • 为什么锁定它,
  • 如何协调文件上的不同活动以避免冲突。

答案 1 :(得分:1)

当您尝试打开UNC路径时,此错误消息的另一个原因可能是代码在已调度的代理中运行。

在这种情况下,与服务器\ 10.XX.XX.XX \的连接将在运行Domino的OS帐户的上下文中打开 - 通常是“SYSTEM”。由于“SYSTEM”用户不允许与另一台服务器建立网络连接,因此打开的呼叫将失败。

解决方案:将Domino服务作为另一个(AD)用户运行,该用户有权建立网络连接。

答案 2 :(得分:0)

你没有说出什么操作系统,但我会根据UNC格式猜测Windows。

Microsoft有一个名为Process Monitor的程序。您可以使用它来跟踪触摸文件的内容。

http://technet.microsoft.com/en-us/sysinternals/bb896645

但我也会先和leyrers做出回应。