如何检查是否正在读取文件

时间:2011-08-22 18:15:13

标签: java jasper-reports

有人能告诉我是否可以检查是否正在读取文件。如果正在读取,那么如何让我的程序等待,直到读数结束,以便它可以开始写入。

当我尝试写入正在读取的文件时出现以下错误:

 net.sf.jasperreports.engine.JRException: Error trying to export to file : 
......(some errors not shown here) ....
 Caused by: java.io.FileNotFoundException: D:\servers_installs\tomcat6_9494\webapps\testdoc\logs\xyz.pdf (The process cannot access the file because it is being used by another process)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:305)
... 19 more

2 个答案:

答案 0 :(得分:1)

我暂时没有使用过Java,但我相信你有一个选择就是使用try catch块。如果捕获到异常,则意味着写入失败,您可以继续尝试直到它起作用。这是一个可能是也可能不是正确Java代码的示例。但你应该得到一般的想法。

boolean worked = false;
while (!worked && timeout<20)
{
   try
   {
     // writing code here

     // set worked to true
     worked = true;
   }
   catch
   {
     // do nothing
   }
}

确保它在单独的线程中运行。如果还有另一个阻止写入发生的问题,也请将其计时。希望有所帮助。

答案 1 :(得分:0)

您无需检查是否正在读取文件:

  1. 调用读取功能。

  2. 调用write函数。

  3. 按顺序调用函数将自动让程序FIRST读取文件,然后写入文件。

    以下代码可能有所帮助:

    try
    {
        //enter the code which is giving the specified error here.
    }
    catch(JRException e)
    {
          System.out.println("Jasper Exception.");
    }
    

    确保所有变量都已正确初始化。 如果你可以在这里发布你的代码,那将会有所帮助。