0
刪除創建的文件,我需要退出方法之前有權刪除文件:如何通過FileOutputStream中
String holdInFdfFile = "myPDF1";
this.holdModifiedPDFDir = "C:\\pdfs\\Jobs\\";
String tempString = this.holdModifiedPDFDir + "\\" + holdInFdfFile;
//Create Flattened PDF
PdfReader PDFreaderFlattened = new PdfReader(this.holdOriginalPDFDir + holdInPdfFile);
FileOutputStream foutFlattened = new FileOutputStream(this.holdModifiedPDFDir + holdInFdfFile + "_FLAT.pdf");
PdfStamper stampFlattened = new PdfStamper(PDFreaderFlattened, foutFlattened);
FdfReader holdFDFreaderFlattened = new FdfReader(tempString);
stampFlattened.setFreeTextFlattening(true);
stampFlattened.setFullCompression();
stampFlattened.setFormFlattening(true);
stampFlattened.setFullCompression();
AcroFields formFlattened = stampFlattened.getAcroFields();
formFlattened.setFields(holdFDFreaderFlattened);
stampFlattened.close();
foutFlattened.close();
我需要刪除foutFlattened
文件。
我也注意到,即使認爲我close()
它,它不允許我刪除該文件,除非我殺死該進程。
我用java 1.80_92
沒有修復文件的關閉。我還需要在退出方法之前刪除此文件。 – Angelina
這是Java 6 bug imho以及爲什麼close()方法被添加到Java 7中的URLClassloader的原因。 –
另外,我相信PDFStamper不會關閉底層的PDFReader,因此您仍然有打開文件的句柄。您將需要關閉每個文件的句柄。看,我看到有人可能在某個時候更新了代碼來關閉底層的閱讀器,但該修復可能會或可能不在您正在使用的版本(或已發佈?)。無論如何,我會從那裏開始,並嘗試在您使用的每個I/O類上明確地調用每一個關閉。 –