2009-10-12 9 views
8

Se ho una risorsa su un classpath, posso caricarla sia come stream fine, sia addirittura con una rappresentazione URL. Sfortunatamente alcune implementazioni dell'Url non implementano correttamente LastModified.Dato una risorsa classpath, c'è un modo per ottenere l'oggetto java.io.File che lo ha/contiene?

Quello che mi piacerebbe è prendere un percorso per qualcosa nel classpath, e poi risolverlo in un file che è su disco - se si trova in un barattolo, allora un File che punta al barattolo va bene. Posso quindi ottenere l'ultimo modificato dall'oggetto File anziché dall'URL, che sarà più utile.

risposta

12

In parole povere:

URL url = this.getClass().getResource(myResource); 
    String fileName; 
    if (url.getProtocol().equals("file")) { 
     fileName = url.getFile();   
    } else if (url.getProtocol().equals("jar")) { 
     JarURLConnection jarUrl = (JarURLConnection) url.openConnection(); 
     fileName = jarUrl.getJarFile().getName();    
    } else { 
     throw new IllegalArgumentException("Not a file"); 
    } 
    File file = new File(fileName); 
    long lastModified = file.lastModified(); 

dovrebbe fare quello che vuoi. Dovrai prendere IOException.

-1

No. Questo non può essere fatto in generale perché l'URL può rappresentare risorse che non sono associate a un file. Ad esempio, può essere HTTP, FTP o JNDI ecc.

È possibile verificare il protocollo e creare il file da soli se il protocollo è basato su file, ad esempio "file: // percorso", "jar: // percorso ! ... ".

Problemi correlati