Visualizzazione dei risultati da 1 a 3 su 3

Discussione: getResourceAsStream?

  1. #1

    getResourceAsStream?

    Ciao

    qualcuno mi sa spiegare perchè (soprattutto se si deve impacchettare le classi in un file jar) occorre leggere qualsiasi file come in questo caso un'immagine usando getResourceAsStream?:


    String res = com/../.. (percorso relativo dalla directory dei file class)

    InputStream is = this.getClass().getClassLoader().getResourceAsStre am(res);
    if (is != null) {
    ImageData imageData = new ImageData(is);

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: getResourceAsStream?

    Originariamente inviato da robyp7582
    qualcuno mi sa spiegare perchè (soprattutto se si deve impacchettare le classi in un file jar) occorre leggere qualsiasi file come in questo caso un'immagine usando getResourceAsStream?:
    Se vuoi che le "risorse" da caricare stiano insieme alle classi, allora puoi appunto sfruttare getResource()/getResourceAsStream() che sfruttano lo stesso meccanismo che il classloader usa per trovare le classi.
    In tal caso non centra più tanto dove stanno fisicamente le risorse ma centra il "classpath".

    Originariamente inviato da robyp7582
    String res = com/../.. (percorso relativo dalla directory dei file class)

    InputStream is = this.getClass().getClassLoader().getResourceAsStre am(res);
    In realtà si può fare anche più semplice.

    Immagina di avere una classe Pippo in un package com.prova (cioè il nome completo è com.prova.Pippo). Il file .class deve stare in un percorso com/prova. Se lì sotto, nella stessa directory prova, hai ad esempio una immagine pluto.gif, allora puoi ottenere l'URL della risorsa facendo:

    URL url = Pippo.class.getResource("pluto.gif")

    o

    URL url = Pippo.class.getResource("/com/prova/pluto.gif")

    Nel primo caso, non inizia con '/' e quindi si usa il package della classe Pippo. Nel secondo caso, la risorsa è indicata in modo assoluto con ciò che c'è dopo il primo '/'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Caricamento report

    Ciao a tutti, sto creando un'applicazione che tra le altre cose deve esportare in PDF dei dati, utilizzando JasperReport. Il problema nasce quando utilizzo il metodo getResourceAsStream per ricercare il report. Nella directory dove ci sono i sorgenti delle classi ho anche la cartella "reports" in cui sono salvati tutti i report.

    Il codice è:

    codice:
    InputStream is = getClass().getResourceAsStream("/reports/"+JASPER_FILENAME + ".jrxml");
    JasperDesign jasperDesign = JRXmlLoader.load(is);
    Purtroppo quando deve caricare il report (JRXmlLoader.load()) lancia l'eccezione: java.net.MalformedURLException.

    Ho notato facendo il debug che quando deve eseguire il getResourceAsStream, la mia variabile is rimane comunque null, quindi non carica bene la risorsa. Come potrei risolverlo?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.