Come posso accedere a un file di configurazione all’interno del jar?

Sto usando FlatPack per analizzare e caricare dati da file flat. Ciò richiede il caricamento di un file di configurazione che memorizza i mapping delle colonne del file flat.

Ho una costante per definire la posizione del file di mapping:

private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml"; 

Ho un metodo di analisi (file datafile) che esegue effettivamente l’analisi:

 private void parse(File dataFile) throws FileNotFoundException, SQLException { Parser parser; log.info("Parsing " + dataFile.getName()); FileReader mappingFileReader = new FileReader(MAPPING_FILE); FileReader dataFileReader = new FileReader(dataFile); parser = DefaultParserFactory.getInstance().newFixedLengthParser(mappingFileReader, dataFileReader); parser.setHandlingShortLines(true); DataSet dataSet = parser.parse(); //process the data } 

Quando metto in ordine tutto e lo faccio girare come un barattolo, esso FileReader mappingFileReader = new FileReader(MAPPING_FILE); su FileReader mappingFileReader = new FileReader(MAPPING_FILE); con un FileNotFoundException . Quel file è all’interno del barattolo però.

Come ci arrivo?

Ho esaminato questa domanda e questa domanda sull’accesso ai file all’interno dei jar e entrambi raccomandano di estrarre temporaneamente il file. Non voglio farlo però.

se è all’interno di un JAR, non è un file, in generale. È necessario caricare i dati utilizzando Class.getResourceAsStream(String) o qualcosa di simile.

Se ricordo bene, getResourceAsStream () può comportarsi in modo diverso a seconda del server Web in cui viene distribuita la tua webapp, ad esempio penso che possa essere un problema quando viene distribuito come war su un’istanza di Websphere. Ma non sono sicuro se questo vale per te.

Ma non sono sicuro che tu stia cercando di risolvere il problema “corretto”: se si tratta di un file di configurazione, significa che i dati sono dipendenti? Non dipende dal codice (il tuo barattolo)? Quando cambierà il file flat, anche il tuo file di configurazione dovrà cambiare, giusto? Se questo è vero, sembra che la configurazione debba essere memorizzata meglio altrove o addirittura essere passata come parametro al tuo jar.

Ma forse non ho capito appieno il tuo problema …

Usa la configurazione di Apache Commons, quindi puoi leggere / scrivere XML, aggiornare automaticamente, trovare il file di configurazione in path o jar, senza molti problemi.