2016-05-04 4 views
0

je dois supprimer le fichier juste avant la sortie de la méthode:Comment puis-je supprimer le fichier créé par 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(); 

Je dois supprimer le fichier foutFlattened.

J'ai également remarqué, même pensé close() il, il ne me permet pas de supprimer le fichier à moins que je tuer le processus.

J'utilise java 1.80_92

Répondre

1

Il y a une question qui semble venir de temps en temps avec Java 6. Je ne l'ai pas vu dans Java 7, mais si vous fermez-le et il semble encore Comme quelque chose est suspendu sur le fichier, vous devrez peut-être appeler un gc pour que jvm libère complètement le fichier afin que vous puissiez le supprimer. Pratique hideuse, mais c'était la seule chose qui fonctionnait quand je l'avais rencontré par le passé.

+0

qui n'a pas corrigé la fermeture du fichier. J'ai également besoin de supprimer ce fichier, juste avant de quitter la méthode. – Angelina

+0

Ceci est un bug Java 6 imho et la raison pour laquelle la méthode close() a été ajoutée à URLClassloader dans Java 7. –

+0

Aussi, je crois que PDFStamper ne ferme pas le PDFReader sous-jacent, donc vous avez toujours des poignées pour le fichier ouvert. Vous aurez besoin de fermer chaque qui a un handle pour le fichier. En regardant, je vois que quelqu'un a peut-être mis à jour le code à un moment donné pour fermer le lecteur sous-jacent, mais ce correctif peut être ou ne pas être dans la version que vous utilisez (ou publié encore?). Quoi qu'il en soit, je commencerais par là et j'essayerais d'appeler explicitement chaque personne pour chaque classe d'E/S que vous utilisez. –