2016-05-04 20 views
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

回答

1

有這似乎從時間上來時間與Java 6,我還沒有看到它在Java 7中的一個問題,但如果你關閉它,它似乎仍像掛在文件上的東西,你可能需要調用gc才能使jvm完全釋放文件,以便刪除它。 Horrid的做法,但這是我過去遇到過的唯一一件事情。

+0

沒有修復文件的關閉。我還需要在退出方法之前刪除此文件。 – Angelina

+0

這是Java 6 bug imho以及爲什麼close()方法被添加到Java 7中的URLClassloader的原因。 –

+0

另外,我相信PDFStamper不會關閉底層的PDFReader,因此您仍然有打開文件的句柄。您將需要關閉每個文件的句柄。看,我看到有人可能在某個時候更新了代碼來關閉底層的閱讀器,但該修復可能會或可能不在您正在使用的版本(或已發佈?)。無論如何,我會從那裏開始,並嘗試在您使用的每個I/O類上明確地調用每一個關閉。 –