我有一个servlet,它读取多部分数据并将文件保存到某个临时位置。然后调用ejb无状态服务,其中一个方法将文件路径作为字符串参数。
在服务中我检查
如何在不必从服务中的多个位置调用file.delete()的情况下有效地执行此操作?
下面是我写的一些原始代码
... service() {
extractDescriptor(filePath);
}
... extractDescriptor(String filePath) {
String extension = filePath.substring(filePath.lastIndexOf(".") + 1).toLowerCase();
switch(extension) {
case "zip":
unzipper.extractFromZip(filePath);
break;
case "tar":
untar.extractFromTar(filePath);
break;
case "z":
untar.extractFromZ(filePath);
break;
default:
new File("filePath").delete();
throw RuntimeException("invalid extention");
}
}
在Unzipper中
ZipEntry entry = zipFile.getEntry("descriptor.xml");
if(entry == null) {
file.delete();
throw new RuntimeException("descriptor xml not found");
}
与Untar相同
我对交易知之甚少。有人可以帮帮我吗?
答案 0 :(得分:2)
将extractDescriptor()
的正文包裹在try/finally
中,并在finally块中加new file(filePath).delete();
。无论你是否正常退出(并使用该文件完成)或抛出异常,该文件都将被删除。