2013-04-15 13 views
10

Il mio codice:.getResourceAsStream percorsofile durante l'esecuzione .jar

BufferedInputStream bis = 
    new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3")); 

Questo codice funziona bene quando il file è in playerhit.mp3 stesso pacchetto come il MP3.class è in esecuzione in Io corro questo come .jar. Se però cambio il percorso del file a qualcosa come /src/data/audio/playerhit.mp3 non funziona più. È comunque possibile accedere a diversi filepath rispetto a root del pacchetto mentre è in esecuzione come .jar?

+0

È il 'playerhit.mp3' copiati sul classpath durante la costruzione? Che cosa usi per costruire: Ant, Maven, ...? –

+0

Io non la penso così ... e sto usando netbeans per costruire. – user2281673

+0

Hai usato "data/audio/playerhit.mp3" invece di "playerhit.mp3"? – NINCOMPOOP

risposta

6

Dai uno sguardo allo Javadoc for getResourceAsStream(...).

Se l'argomento inizia con un /, il nome assoluto della risorsa è la parte del nome che segue lo /. In caso contrario, il nome assoluto è il seguente: modified_package_name/name Dove modified_package_name è il nome del pacchetto di questo oggetto con / sostituito per ..

Quindi, se lo playerhit.mp3 si trova nella radice della struttura del pacchetto, è necessario fare riferimento come /playerhit.mp3. Se è in /src/data/audio/, dovresti probabilmente usare /data/audio/playerhit.mp3 - ma controlla il contenuto del tuo file JAR per essere sicuro.

+0

È /data/audio/playerhit.mp3. Ho provato a utilizzare "/ data/audio /" che non funziona anche direttamente da netbeans e "./data/audio" funziona come altro, ma non quando è in esecuzione da .jar – user2281673

+0

La cartella 'data' sul classpath in Netbeans? Il metodo 'getResourceAsStream()' carica solo le risorse presenti nel classpath. – mthmulders

+1

Ok ora mi sento stupido. Dopo aver usato path come "data/audio/nomefile.mp3" senza barra o punto, l'ho fatto funzionare. Ciao ragazzi, speriamo che questo aiuti almeno gli altri – user2281673

0

Controllare prima se il file è effettivamente nel contenitore.

Controllare la posizione all'interno del vaso.

Percorso relativo: pacchetto corrente

Percorso assoluto: radice del vaso

Problemi correlati