Automatic translation

Archives

mai 2008
L Ma Me J V S D
« avr   juin »
 1234
567891011
12131415161718
19202122232425
262728293031  

Contributeurs

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;
        }
      }