2012-10-14 7 views
14

Ho una semplice classe java in un'applicazione web e voglio leggere un file di configurazione nella cartella WEB-INF. Conosco il modo di accedere al file se presente nel classpath (cartella WEB-INF/classes). Poiché la cartella WEB-INF/classes è destinata ai file .class, desidero mantenere il mio file di configurazione solo nella cartella WEB-INF.Come accedere a un file nella cartella WEB-INF nella classe java

Qualcuno può dirmi come posso accedervi dalla mia classe java?

+1

Se il file di configurazione è per le classi Java, perché metterlo in 'WEB -INF' cartella ... perché non nella cartella 'src/main/resources' e accedervi da lì? –

+0

Direi che 'getResourceAsStream' dovrebbe funzionare – SJuan76

+1

La configurazione dovrebbe essere in src/main/resources e verrà incorporata nella cartella della classe quando si distribuisce l'app Web. Perché è necessario inserire il file di configurazione nella cartella WEB-INF? – Thinhbk

risposta

2

È possibile ottenere il percorso assoluto della servlet utilizzando il metodo getRealPath() di ServletContext e quindi aggiungere WEB-INF al percorso che si ottiene. Penso che questo sia molto di base, potrebbero esserci anche altre risposte.

+1

So come fare questo con l'aiuto di 'ServletContext'. Ma quello che sto cercando è farlo in una semplice classe java. – Newbie

14

ServletContext.getResourceAsStream() caricherà un file da un percorso specificato relativo alla radice del file WAR. Qualcosa di simile:

ServletContext ctx; 
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties"); 

Il problema principale è che è necessario accedere al contesto servlet per essere in grado di fare questo. Hai quello in un servlet o un filtro, ma non in un componente non web più indietro nell'applicazione. Hai alcune opzioni:

  • Rendere il contesto servlet disponibili dal layer web per il livello di servizio, tramite una variabile di applicazione con ambito, o iniezione, o di qualche altro modo
  • mettere il codice risorsa-carico in lo strato web, ed esporre che al livello di servizio
  • Caricare la configurazione nello strato web, e passarlo al livello di servizio
+0

Nessun modo diretto per farlo nel componente non Web come semplice classe java? – Newbie

+1

Non che io sappia. Una semplice classe Java non ha idea di far parte di un'applicazione web, quindi non c'è modo di avere accesso a qualsiasi API per fare cose specifiche per le applicazioni web! –

0

hey you all care for context related file loading like application context , web.xml ,config and property file

Ecco come caricare un file java qualsiasi tipo di file in WEB-INF ma memorizzato su un altro stucture come un sub cartella reportFile il file o la cartella sub nuovo report01 -

fullpath is = /WEB-INF/reportFile/report01/report.xml, ho provato molte possibilità di caricare e leggi questo file xml ... nessuno dei precedenti ha funzionato per me ma, ecco il trucco per l'uso futuro ...

In Action or inservice class you know interface implementation class no imports anche questa è una buona parte.

dichiarare il vostro oggetto file

File myClass = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile()); 
System.out.println("Finding calss path first then remove classes from the path " + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml") 

2.Caricare il percorso, eliminando classes da quanto sopra e aggiungere il vostro percorso specifico

File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml") 

Poi

si può anche analizzarlo usando XML parser o fare qualsiasi cosa

document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")); 

Saluti !!

1

"new FileInputStream ( Utility.class.getClassLoader(). GetResource (KeyFileName) .getPath() )" ha lavorato per me.

Qui "Utility" è il mio nome della classe in cui il codice sta chiamando questa linea, "KeyFileName" è il file ho bisogno di aprire

Problemi correlati