【发布时间】:2014-02-02 00:10:42
【问题描述】:
我正在尝试确定打印作业或 .prn 文件是否已完成写入计算机。 创建步骤:单击文件上的打印 -> 并选择(打印到文件) 将尝试将该文件保存在您计算机上的某个位置,并打开一个输入文件名和保存位置的窗口。 输入文件名,点击保存。
然后该文件将开始以 .prn 文件的形式写入指定文件夹。 我正在尝试确定此写入是否已完成以及该文件是否可用于进一步处理。 java - 如何识别文件是否完整并在java中准备就绪? 我尝试了文件锁定(nio)以及随机文件访问。后者在尝试从计算机上的一个位置保存/移动/复制到另一个位置时有效,但是当我尝试使用 .prn 保存时,失败了。
请建议在java中识别.prn文件写入是否完成。
下面是我试图找出 .prn 文件是否已完成写入文件夹的代码。 I have tried this, from this link here.
public void uploadFiles(final File folder) {
if (folder.list().length > 0) {
upload.setEnabled(true);
for (final File fileEntry : folder.listFiles()) {
try {
if(isFileCompletelyWritten(fileEntry)){
if (onSendData(fileEntry.getAbsolutePath())) {
deleteFile(fileEntry);
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
} else {
upload.setEnabled(false);
}
}
private boolean isFileCompletelyWritten(File file) {
RandomAccessFile stream = null;
try {
stream = new RandomAccessFile(file, "rwd");
return true;
} catch (Exception e) {
System.out.println("Skipping file " + file.getName() + " for this iteration as it's not completely written");
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
System.out.println("Exception during closing file " + file.getName());
}
}
}
return false;
}
isFileCompletelyWritten(文件文件)
方法是我添加的查找文件写入是否完成的方法。这在我尝试保存打印文件时不起作用,但在复制、移动、将文件从计算机上的一个文件夹保存到另一个文件夹时它确实起作用。 .prn 文件在字节流进入时可供我的程序使用。RandomfileAccess 无法检测写入是否完成,而不是跳过该文件。当字节流按顺序逐块写入文件时,我的程序继续执行下一步,认为文件是完整且可用的。当我在将本地文件从一个位置复制到另一个位置时运行相同的代码时,Randomfileaccess 能够检查并看到正在写入更多数据,并且我的程序能够跳过该迭代的过程。这就是我的程序失败的原因。
【问题讨论】:
-
您需要解释(更清楚地)准确您尝试了什么以及准确什么失败了。你目前的解释太模糊了。
-
谢谢。我添加了更多关于我尝试和失败的细节。请建议是否有办法确定 .prn 文件已完全写入。
-
你还没有解释如何它失败了。
-
用进一步的解释更新了我的问题。