2010-11-17 7 views
3

J'ai une application jar qui contient plusieurs rapports (fichiers .jasper) et la façon dont je reçois le chemin du rapport est:Problèmes d'accéder à un rapport dans un fichier jar

getClass().getResource("/reportes/mireporte.jasper").toString(); 

mais quand j'exécute I obtenir l'erreur suivante: FileNotFoundException bien que le rapport se trouve dans le fichier jar lorsque je l'ouvre avec le winrar.

Mes questions sont les suivantes:

  1. Est-ce la façon d'obtenir le chemin d'un rapport dans un fichier jar?
  2. Est-il possible d'ouvrir des rapports situés dans un fichier JAR?

Répondre

2

Pourquoi vous convertir les ressources en chaîne ??

Essayez d'utiliser (selon la façon dont vous souhaitez utiliser la ressource):

  • getResource("/report/mireporte.jasper").getFile()

  • getResource("/report/mireporte.jasper").getInputStream()

objet Retourné de 'getResource' est URL:

+0

Merci! Fonctionne parfaitement! – HenryOS

0

1) Is this the way to get the path of a report in a jar files?

Oui, appelez le getClass().getClassLoader().getResources("mireporte.jasper") - il vous donnera une liste des ressources correspondant au nom.

2) Is posible to open reports that are within of a jar file?

Oui! Utilisez getClass().getResourceAsStream("...") et lisez à partir de celui-là!

Exemple:

public static void main(String... args) throws IOException { 
    final ClassLoader cl = GetResource.class.getClassLoader(); 

    // print all resources (could be more than one) 
    Enumeration<URL> resources = 
     cl.getResources("foo/bla/tjo/mireporte.jasper"); 

    while (resources.hasMoreElements()) 
     System.out.println(resources.nextElement()); 


    // read one of the files 
    Scanner s = new Scanner(
      cl.getResourceAsStream("foo/bla/tjo/mireporte.jasper")); 
    try { 
     while (s.hasNextLine()) { 
      System.out.println(s.nextLine()); 
     } 
    } finally { 
     if (s != null) 
      s.close(); 
    } 
} 
Questions connexes