Maison >Java >javaDidacticiel >Quelle est la meilleure façon de charger un fichier en tant que InputStream en Java ?

Quelle est la meilleure façon de charger un fichier en tant que InputStream en Java ?

DDD
DDDoriginal
2024-12-20 16:01:18394parcourir

What's the Best Way to Load a File as an InputStream in Java?

Différentes façons de charger un fichier en tant qu'InputStream

Introduction :

Java fournit plusieurs méthodes pour charger un fichier en tant que InputStream. Cet article explore les différences entre les approches suivantes :

  • InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName)
  • InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)
  • InputStream est = this.getClass().getResourceAsStream(fileName)

Interprétation du paramètre fileName :

Chaque méthode interprète le paramètre fileName différemment. ClassLoader.getResourceAsStream() traite tous les chemins comme absolus, tandis que Class.getResourceAsStream() les considère comme relatifs au package de la classe appelante.

Cas d'utilisation appropriés :

1. Utilisation de Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)

Cette méthode est recommandée lors du chargement d'un fichier qui fait partie du chemin de classe de l'application et empaqueté dans le même JAR ou EAR que l'appelant classe. Il donne accès aux ressources de chemin de classe quel que soit l'emplacement de la classe ou du package.

2. En utilisant this.getClass().getResourceAsStream(fileName)

Cette méthode convient au chargement de fichiers situés dans le même package que la classe appelante. Ceci est particulièrement utile lorsque le fichier est emballé dans un JAR et accessible via le chemin de classe.

3. Utilisation de this.getClass().getClassLoader().getResourceAsStream(fileName)

Cette méthode est similaire à Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName) mais est moins couramment utilisée. Il charge également les fichiers à partir du chemin de classe de l'application, mais son comportement peut varier en fonction de l'implémentation du chargeur de classe.

Avertissement pour les utilisateurs de Tomcat 7 :

Dans Tomcat 7 et versions antérieures , ClassLoader.getResourceAsStream() et Class.getResourceAsStream() ne peuvent pas gérer les noms de ressources contenant des barres obliques (/) de manière cohérente comme spécifié par le Javadoc. Assurez-vous toujours d’une normalisation correcte lorsque vous utilisez ces méthodes.

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