有人能告诉我是否可以检查是否正在读取文件。如果正在读取,那么如何让我的程序等待,直到读数结束,以便它可以开始写入。
当我尝试写入正在读取的文件时出现以下错误:
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
答案 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)
您无需检查是否正在读取文件:
调用读取功能。
调用write函数。
按顺序调用函数将自动让程序FIRST读取文件,然后写入文件。
以下代码可能有所帮助:
try
{
//enter the code which is giving the specified error here.
}
catch(JRException e)
{
System.out.println("Jasper Exception.");
}
确保所有变量都已正确初始化。 如果你可以在这里发布你的代码,那将会有所帮助。