2017-03-15 3 views
0

Je voudrais mettre des ressources dans mon fichier JAR mais il y a un problème quand je veux l'utiliser. Si je montre le chemin avec ce code:valeur nulle pour une ressource en Java

JOptionPane.showMessageDialog(null, MyStaticClass.class.getResource("/ressources/") + "file.File" + i, "OK", JOptionPane.INFORMATION_MESSAGE); 
       File file = new File(MyStaticClass.class.getResource("/ressources/") + "file.File" + i); 

Le résultat de messagebox est jar:file:/home/clement/Bureau/Untitled.jar!/ressources/niveau.Niveau1 et l'exeption

java.io.FileNotFoundException: jar:file:/home/clement/Bureau/Untitled.jar!/ressources/file.File1 (No file or folder of this type) 

Les fichiers se trouvent dans le dossier src src/ressources/file.File1

+0

essayez ceci http://stackoverflow.com/questions/941754/how-to-get-a-path-to-a-resource-in-a-java-jar-file –

Répondre

0

getResourceAsStream() renvoie InputStream. Votre code essaie essentiellement de trouver le fichier '/ ressources /' qui n'est pas un fichier mais un répertoire, donc getResourceAsStream() renvoie null pour cela.

Il est inutile d'imprimer un InputStream. Qu'est-ce que vous pourriez faire quelque chose comme ceci:

InputStream is = MyStaticClass.class.getResourceAsStream("/ressources/" + "file.File1") 

Et puis lire son contenu (par exemple, en utilisant des méthodes de InputStreamread(), ou l'envelopper avec un InputStreamReader et de l'utiliser est read() Il est difficile de donner plus de conseils que. Je ne sais pas ce que vous voulez faire avec ce que vous lisez.

une mise à jour pour le code de mise à jour question suit

getResource() retourne une instance URL, qui ne convient pas f ou l'impression aussi (et pour la concaténation en utilisant l'opérateur +). Mais vous pouvez le convertir en File par exemple si vous voulez avec l'aide de getFile() méthode:

File file = new File(MyStaticClass.class.getResource("/ressources/" + "file.File" + i).getFile()); 

S'il vous plaît noter également que getResource() est appelée sur le nom complet de ressources et non pas seulement le nom du répertoire.

Ensuite, vous pouvez travailler avec cette instance File.

Mais si vous voulez juste lire le contenu des ressources, vous pouvez faire quelque chose comme ce qui suit (sans besoin de se URL par exemple):

InputStream is = MyStaticClass.class.getResourceAsStream("/ressources/" + "file.File1") 
Scanner scanner = new Scanner(new InputStreamReader(is, "utf-8")); 
try { 
    if (scanner.hasNextLine()) { 
     System.out.println(scanner.nextLine()); 
    } 
} finally { 
    scanner.close(); 
} 

Cet exemple suppose que votre fichier est un fichier texte et a au moins une ligne. Il imprime cette ligne à la console.

+0

J'ai édité la question parce qu'elle était un autre code j'ai essayé. Merci. –

+0

J'ai mis à jour ma réponse en conséquence –