我的应用程序写入 Excel 文件。有时可以使用文件,在这种情况下抛出 FileNotFoundException 然后我不知道如何更好地处理它。
我告诉用户该文件已被使用,并且在该消息之后我不想关闭应用程序,而是在文件可用时停止并等待(假设它是由同一用户打开的)。但我不明白如何实现它。file.canWrite() 不起作用,即使打开文件,它也会返回 true,使用 FileLock 并检查锁是否可用我需要打开一个流,但它会抛出 FileNotFoundException(我一直在考虑检查lock in a busy wait,我知道这不是一个好的解决方案,但我找不到另一个)。
如果它可以以某种方式帮助理解我的问题,这是我的代码的一部分:
File file = new File(filename);
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if (lock == null) {
new Message("lock not available");
// to stop the program here and wait when the file is available, then resume
}
// write here
lock.release();
}
catch (IOException e) {
new Message("Blocked");
// or to stop here and then create another stream when the file is available
}
对我来说比较困难的是它写入不同的文件,如果第一个文件可用,而第二个文件不可用,那么它将更新一个文件然后停止,如果我重新启动程序,它会更新它再次,所以我不能让程序写入文件,直到所有文件都可用。
我认为应该有一个通用的解决方案,因为处理这种情况必须是Windows中的一个常见问题,但我找不到。