ClassLoader et rechargement de fichiers

N’avez-vous jamais eu besoin de recharger un fichier placé dans l’un des répertoires apparaissant dans la variable d’environnement CLASSPATH ? Habituellement, ces fichiers sont chargés dans la mémoire de la JVM en utilisant la méthode "getResourceAsStream" de la classe "java.lang.ClassLoader". Or, une fois les fichiers chargés par un ClassLoader, ils restent en mémoire et ne sont plus lus depuis les disques ou le réseau. Pour forcer leur rechargement, il suffit d’instancier un nouveau ClassLoader. Cela se fait en quelques lignes de Java :

public class ResourceLoader { public static InputStream getResourceAsStream(String name) { ClassLoader loader = new URLClassLoader(constructUrls()) { public URL getResource(String name) { return findResource(name); } }; return loader.getResourceAsStream(name); } private static URL[] constructUrls() { String classpath = System.getProperty("java.class.path"); String[] paths = classpath.split(File.pathSeparator); int length = paths.length; URL[] arrayOfUrls = new URL[length]; try { for (int i=0; i<length; i++) arrayOfUrls[i] = new File(paths[i]).toURI().toURL(); } catch (MalformedURLException e) { ... } return arrayOfUrls; } }