3

Cultura informatica: Java riuscire a cancellare un file dal FileSystem

Negli ultimi giorni sono stato impegnato per risolvere un’anomalia Java: Un file generato da un parsing XML non veniva cancellato da file System (WINDOWS). Il metodo file.delete() non funzionava. Forniva come risultato false

Nello specifico il codice era di questo tipo:

import java.io.File;
import java.io.IOException;
import java.io.StringReader;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Test {

public static void main(String[] args) throws TransformerException, IOException {
File test = new File(“test.txt”);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer xformer = tf.newTransformer();
StringReader st = new StringReader(“< ?xml version=\"1.0\" encoding=\"UTF-8\"?>“);
StreamSource s = new StreamSource(st);
StreamResult r = new StreamResult(test);
xformer.transform(s,r);
System.out.println(“Delete:”+test.delete());
}
}

In sintesi se usi uno StreamResult(File) il file non viene chiuso dal transform() method.
Risultato: il file non può essere cancellato o rinominato finchè non si riavvia la JVM

Dopo tanto penare il bug è risultato essere di JAVA
Il bug è questo: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6216226

Questa cosa è stata risolta nella versione di jaxp 1.4 di java.net
il link è questo: https://jaxp.dev.java.net/servlets/ProjectDocumentList

Per avere i jar bisogna installare il jar della versione di jaxp 1.4 da qualche parte sulla vostra macchina

Avviare l’installazione con : java -jar JAXP_143.jar
che scompatta tutto sotto la cartella ./jaxp-1_4_3.

L’installazione vi fornirà  i sorgenti, la javadoc e gli agognati jar da installare.
Su Java 5 è sufficiente copiare i due file: jaxp-api.jar e jaxp-ri.jar sotto:
[jdk1.5]/jre/lib/endorsed

Ho provato a invocarli nell’avvio dell’applicazione Java, ma non ne ha voluto sapere!!! Nella maniera sopradescritta funziona e così ve la dico!!!

Copiate quindi i due jar nella cartella “endorsed” ( se non esiste createla!!!)
Riavviate il processo java e come per magia riuscirete a cancellare il file

Leave a Reply

Your email address will not be published.


*


5