Chargement de fichiers en tant qu'InputStreams : différentes approches et quand les utiliser
Lorsqu'il s'agit de charger des fichiers en tant qu'InputStreams, il existe plusieurs méthodes qui peuvent être employés, chacun avec ses propres nuances. Cet article examine les différences entre trois approches couramment utilisées :
Class.getResourceAsStream(fileName) :
Cette méthode interprète le nom de fichier comme un chemin relatif au package de la classe qui l’invoque. Par exemple, String.class.getResourceAsStream("myfile.txt") recherche le fichier "myfile.txt" dans le chemin de classe à "java/lang/myfile.txt". Si le chemin commence par un "/", cela signifie un chemin absolu et commence la recherche à partir de la racine du chemin de classe.
ClassLoader.getResourceAsStream(fileName):
Contrairement à Class.getResourceAsStream(), cette méthode traite tous les chemins comme absolus. String.class.getClassLoader().getResourceAsStream("myfile.txt") et String.class.getClassLoader().getResourceAsStream("/myfile.txt") recherchent le fichier "myfile.txt" dans le chemin de classe à "./myfile.txt."
Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName):
Cette méthode est approprié lors du chargement de classes et de fichiers à partir d'un serveur d'applications, car il utilise le chargeur de classes de contexte associé au thread actuel, qui gère les ressources déployées dans le serveur.
Quand utiliser chaque méthode :
Dans votre scénario spécifique, où le fichier et la classe résident dans le même fichier jar et EAR déployé dans WebSphere 6.1, vous devez utiliser Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName) car il prend en compte le contexte chargeur de classe du serveur d'applications.
Avertissement pour les utilisateurs de Tomcat 7 et versions antérieures :
Cependant, tenez compte de la mise en garde suivante si vous utilisez Tomcat 7 ou une version antérieure. Bien que l'explication ci-dessus soit généralement valable, il semble que les versions 6 et 7 de Tomcat gèrent différemment la normalisation des ressources dans la méthode findResource(String name). Par conséquent, classLoader.getResourceAsStream("/resource.txt") et classLoader.getResourceAsStream("resource.txt") peuvent ne pas donner le même résultat dans ces versions. Soyez prudent si vous utilisez ces méthodes dans des versions antérieures de Tomcat.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!