2011-01-21 3 views
7
public class ABC { 
    public ABC() { 
     File file = new File("xyz.xml"); 

mais quand je lance mon pot comme suit:ne se trouve pas exception dans un bocal

java -jar filename.jar arguments.... 

il affiche l'erreur:

java.lang.IllegalArgumentException: InputStream cannot be null 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:120) 
at com.ensarm.niidle.web.proxy.ABC.<init>(ABC.java:47) 

Comment puis-je résoudre ce problème?

Répondre

10

Si vous devez lire le contenu d'un fichier dans les fichiers JAR, vous ne pouvez pas utiliser directement la classe File. En utilisant ClassLoader pour le charger:

// for example read the SeleniumConfiguration.xml in the default package

InputStream input = SeleniumConfiguration.class.getResourceAsStream("/SeleniumConfiguration.xml"); 
+1

Oui, c'est correct. Vous ne pouvez pas ouvrir un "fichier" car il suppose que vous êtes sur un système d'exploitation ou un réseau. Il ne "verra pas" le pot. Belle réponse @ qrtt1. Tu m'as battu à la façon de le décrire. :) –

+0

Merci qrtt1 – swarup7m

4

Le NullPointerException est une indication claire que le fichier n'a pas été trouvé.

InputStream input=ABC.class.getResourceAsStream("/Element.xml");

Où est votre fichier XML? Si vous le placez dans le même paquet (répertoire à l'intérieur du fichier jar) que ABC.class, alors il devrait être Element.xml sans la barre oblique.

0

Avez-vous placé votre fichier xml à la racine du fichier jar? Si vous utilisez comme chemin "/Element.xml", la structure de fichier jar doit ressembler à:

pot fichier

  • com
  • META-INF
  • element.xml
+0

Et si vous utilisez un système automatisé pour construire le pot (par opposition à l'exécution du pot à la main), sous Linux au moins, vous pouvez courir moins sur le pot pour voir quels fichiers sont contenus, ou jar -xvf pour extraire les fichiers du pot. – James

+0

'jar -tf' juste pour voir la liste des fichiers – Thilo

1

Normalement, vous pouvez utiliser l'InputStream comme suggéré, mais si vous souhaitez effectuer d'autres opérations non-java sur le fichier, par exemple en le décryptant à l'aide d'une application externe, vous pouvez utiliser FileOutputStream pour écrire ce flux dans un fichier. Le chemin de t en tant que chemin de fichier correct. En termes simples, vous pouvez unjar ce fichier à votre système de fichiers.

Questions connexes