2013-03-08 9 views
7

ho una riga di codice che è: File file = new File(getFile()) in una classe Java HandleData.javacaricamento di un file dal percorso di classe

Metodo - getFile() prende il valore della proprietà fileName. E fileName viene iniettato attraverso application_context.xml con una sezione di fagiolo della classe - HandleData come di seguito:

<bean id="dataHandler" class="com.profile.transaction.HandleData"> 
<property name="fileName" value="DataFile.xml"></property> 
</bean> 

ho costruire il progetto con successo e controllato che - DataFile.xml è presente in WEB-INF/classes. E il HandleData.class è presente in WEB-INF/classes/com/profile/transacon

Ma quando lo eseguo mi getta un'eccezione di filerotazione. Se si immette il percorso assoluto (C:\MyProjectWorkspace\DataProject\target\ProfileService\WEB-INF\classes\DataFile.xml, trova il file correttamente.).

Qualcuno potrebbe aiutare a capire il percorso corretto da iniettare in modo che il file venga preso dal classpath?

risposta

3

Si dovrebbe avere:

<property name="fileName" value="classpath:DataFile.xml" /> 

e dovrebbe essere iniettato come un org.springframework.core.io.Resource simile a this answer

+0

Hi volevi dire Steer360

+0

@ Steer360 Sì, buona cattura. – Lucas

+0

In realtà l'ho provato, mi mostra FileNotFoundException come classpath: DataFile.xml non può essere trovato. – Steer360

2

Dal OP sta iniettando solo il nome del file tramite la molla, ancora voglia di creare l'oggetto file tramite il codice, Si dovrebbe usare ClassLoadeer di leggere il file

Prova questo

InputStream is = HandleData.class.getClassLoader().getResourceAsStream(getFile())); 

Modifica

Heres il resto del codice, per leggere il file

BufferedInputStream bf = new BufferedInputStream(is); 
DataInputStream dis = new DataInputStream(bf); 

while (dis.available() != 0) { 
    System.out.println(dis.readLine()); 
} 

Edit 2

Dal momento che si desidera come oggetto file, per entrare in possesso del FileInputStream

prova questo

+0

OP sta iniettando solo il fileName attraverso la primavera, Vorrebbe comunque creare l'oggetto file tramite il codice – Sudhakar

+0

Si genera un errore - Il file costruttore (URL) non è definito – Steer360

+0

Sto tentando di utilizzare il tuo suggerimento e utilizzare invece InputStream. Attualmente sto passando il fileName come di seguito: FileInputStream fisTargetFile = new FileInputStream (new File (fileName)); Quindi InputStream non funziona per questo pezzo. – Steer360

26

Durante l'iniezione di un File è generalmente l'approccio preferito, è inoltre possibile sfruttare Spring's ResourceLoader per il caricamento dinamico delle risorse.

Generalmente questo è semplice come l'iniezione del ResourceLoader nella vostra Primavera di fagioli:

@Autowired 
private ResourceLoader resourceLoader; 

Poi per caricare dal percorso di classe:

resourceLoader.getResource("classpath:myfile.txt"); 
Problemi correlati