【发布时间】:2013-11-26 16:41:36
【问题描述】:
我有 java 进程 1,它使用 rpc 调用 java 进程 2,它在映射的网络驱动器上创建一个文件。进程 1 然后尝试读取该文件。通常该文件可以正常读取,但有时即使我可以看到它确实已创建,它也找不到该文件。
进程 1、2 和映射的驱动器分别位于不同的 Windows Server 2008 机器上。因此,这些进程位于不同的 JVM 和不同的操作系统上。
进程 2 在返回之前会做这种事情(意味着它确保文件在从 rpc 调用返回之前写入磁盘):
FileOutputStream fileOut = new FileOutputStream(new File(pdfPath));
bufferedOut = new BufferedOutputStream(fileOut);
// write to file
bufferedOut.flush();
fileOut.getFD().sync();
bufferedOut.close();
进程 1 将在 rpc 方法调用返回后尝试读取文件。
我确定文件是在进程 1 尝试读取文件之前写入的,但是 JVM 或操作系统中正在发生一些缓存,这会阻止进程检测文件
在我尝试读取文件之前没有错误,它看起来像这样:
java.io.IOException: G:/mydir/my file ( 1.pdf not found as file or resource.
at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:113)
at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:80)
at com.itextpdf.text.pdf.PRTokeniser.<init>(PRTokeniser.java:112)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:169)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:159)
...
【问题讨论】:
-
如果进程没有检测到文件,那么您可能应该包含一些错误消息。
-
太棒了...听起来和我的问题一模一样...我会试一试
-
@halfbit 请随时添加该链接作为答案
-
这是不可能的:“简单的答案转换为评论。”但是对评论的支持可能足以让其他人走上正轨。 - 或者回答自己并添加一些细节?
标签: java windows file jvm windows-server-2008