J'utilise ce qui suit pour obtenir l'URL de ce fichier particulier, mais il renvoie null. Quelqu'un a-t-il des suggestions quant au problème ou une autre manière de le faire?
URL url = ExchangeInterceptor.class.getResource("GeoIP.dat");
Pour ceux qui utilisent Idée Intellij: vérifier Paramètres -> Compilateur -> Modèles de ressources.
Le paramètre contient toutes les extensions devant être interprétées comme des ressources. Si une extension ne respecte aucun modèle ici, class.getResource retournera la valeur null pour les ressources utilisant cette extension.
Le chemin est relatif à la racine du chemin de classe et si vous ne spécifiez pas de chemin absolu, il recherche dans le même package que la classe que vous utilisez (dans ce cas, ExchangeInterceptor
). Pour trouver quelque chose dans la racine, utilisez /GeoIP.dat
.
Utilisez la méthode getResource
de la classe 'ClassLoader
URL url = ExchangeInterceptor.class.getClassLoader().getResource("GeoIP.dat");
Non, c'est la bonne façon autant que je sache. Assurez-vous que la ressource est sur votre chemin de classe. C'est souvent la cause de ce type de problèmes.
Si vous utilisez Gradle et IntelliJ, et modifier Resource patterns
n'a pas fonctionné, et vos racines de ressources sont définies correctement ... vous pouvez essayer ceci:
Settings > Build, Execution, Delpoyment > Build Tools > Gradle > Runner > Delegate IDE build/run actions to gradle
. (IntelliJ 2017.3.3)
Source: https://youtrack.jetbrains.com/issue/IDEA-176738#comment=27-2518612
Juste au cas où quelqu'un aurait encore du mal à comprendre cela:
.getResource () vous autorise à accéder au dossier bin local. Cela signifie que vos ressources doivent être situées dans YourProject/bin/package /. Le dossier racine est YourProject/bin/et peut être accédé en ajoutant le préfixe/à l’argument String, comme indiqué par iirekm.
Où avez-vous mis ce GeoIP.dat? Dans le même package que ExchangeInterceptor ou dans le package "racine". Si dans le même package, votre code est OK, si à la racine - ajoutez le préfixe '/'.
Vous utilisez peut-être M2Eclipse? Si la configuration est incorrecte, cela peut également entraîner de tels problèmes. Une autre cause de tels problèmes peut être: des chargeurs de classes mal configurés, des OSGi mal configurés, ...
Le fichier doit être dans le chemin de classe, par exemple: -
bin/mon/package/GeoIP.dat
Le préfixe/semble être un mensonge. Ce qui suit fonctionnerait.
URL url = ExchangeInterceptor.class.getResource("my/package/GeoIP.dat");
Je soupçonne que le problème est que vous n'avez pas le fichier dans le classpath.
Au lieu d'avoir le fichier de ressources dans le même dossier que vos fichiers source, créez un dossier resources
parallèle au dossier source Java
.
Avant:
Après: