Maison >Java >javaDidacticiel >Quelle méthode « InputStream » dois-je utiliser pour charger des fichiers sur différents serveurs d'applications ?

Quelle méthode « InputStream » dois-je utiliser pour charger des fichiers sur différents serveurs d'applications ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-16 18:47:15935parcourir

Which `InputStream` Method Should I Use to Load Files in Different Application Servers?

Utilisation de diverses méthodes InputStream pour le chargement de fichiers

Pour charger un fichier en tant qu'InputStream, les programmeurs ont plusieurs options à considérer. Ce discours compare et oppose trois méthodes :

  1. this.getClass().getClassLoader().getResourceAsStream(fileName)
  2. Thread.currentThread().getCont extClassLoader().getResourceAsStream(fileName)
  3. this.getClass().getResourceAsStream(fileName)

Méthode Différences d'interprétation

La principale distinction entre ces méthodes réside dans la manière dont elles interprètent le nom de fichier fourni. ClassLoader.getResourceAsStream() et Class.getResourceAsStream() utilisent des approches différentes :

Class.getResourceAsStream(path):

  • Considère le chemin comme un chemin dans le package de la classe appelante.
  • Exemple : String.class.getResourceAsStream("myfile.txt") recherche "java/lang/myfile.txt" dans le chemin de classe.
  • Un "/" initial indique un chemin absolu, en partant de la racine du chemin de classe. .
  • Exemple : String.class.getResourceAsStream("/myfile.txt") recherche "./myfile.txt" dans le classpath.

ClassLoader.getResourceAsStream(path):

  • Traite tous les chemins comme des chemins absolus.
  • Exemple : String. class.getClassLoader().getResourceAsStream("myfile.txt") et String.class.getClassLoader().getResourceAsStream("/myfile.txt") recherchent tous deux "./myfile.txt" dans le chemin de classe.

Considérations d'adéquation

Dans votre cas spécifique, en déployant dans WebSphere 6.1, vous devez utiliser Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName). Ce choix est conforme à la pratique recommandée pour le chargement de ressources dans un environnement de serveur d'applications. this.getClass().getResourceAsStream() peut également convenir dans ce contexte.

Considérations supplémentaires pour les utilisateurs de Tomcat

Pour les utilisateurs de Tomcat exécutant versions antérieures à 8, notez que ClassLoader.getResourceAsStream() et Class.getResourceAsStream() peuvent se comporter différemment que prévu. Assurez-vous d'évaluer minutieusement le comportement de votre code dans ces environnements.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn