Prístup k súboru z Classpath v jarnej aplikácii

1. Úvod

V tomto tutoriáli uvidíme rôzne spôsoby prístupu a načítania obsahu súboru, ktorý je na ceste triedy, pomocou Spring.

2. Pomocou Zdroj

The Zdroj rozhranie pomáha pri odoberaní prístupu k zdrojom na nízkej úrovni. V skutočnosti podporuje jednotné spracovanie všetkých druhov súborových zdrojov.

Začnime pohľadom na rôzne metódy na získanie a Zdroj inštancia.

2.1. Ručne

Na prístup k prostriedku z cesty triedy môžeme jednoducho použiť ClassPathResource:

public Resource loadEmployeesWithClassPathResource () {return new ClassPathResource ("data / employees.dat"); }

Predvolene, ClassPathResource odstráni nejaký štandardný štítok na výber medzi kontextovým Classloaderom vlákna a predvoleným systémovým Classloaderom.

Môžeme však tiež naznačiť, že classloader sa má používať buď priamo:

vrátiť nový ClassPathResource ("data / zamestnanci.dat", tento.getClass (). getClassLoader ());

Alebo nepriamo prostredníctvom určenej triedy:

vrátiť nový ClassPathResource ("data / zamestnanci.dat", Employee.class.getClassLoader ());

Všimnite si, že od Zdroj, môžeme ľahko prejsť na štandardné reprezentácie Java ako InputStream alebo Súbor.

Tu si treba uvedomiť ešte jednu vec, že ​​vyššie uvedená metóda funguje iba pre absolútne cesty. Ak chcete určiť relatívnu cestu, môžete prejsť sekundou trieda argument. Cesta bude relatívna k tejto triede:

new ClassPathResource ("../../../ data / employees.dat", Example.class) .getFile ();

Cesta k súboru vyššie je relatívna k Príklad trieda.

2.2. Použitím @Hodnota

Môžeme podať aj a Zdroj s @Hodnota:

@Value ("classpath: data / resource-data.txt") Resource resourceFile;

A @Hodnota podporuje aj ďalšie predpony, napríklad spis: a adresa URL:.

2.3. Pomocou nástroja ResourceLoader

Alebo ak chceme lenivo načítať naše zdroje, môžeme použiť ResourceLoader:

@Autowired ResourceLoader resourceLoader;

A potom získame náš zdroj pomocou getResource:

public Resource loadEmployeesWithResourceLoader () {return resourceLoader.getResource ("classpath: data / Zaměstnanci.dat"); }

Všimnite si tiež ResourceLoader je realizovaný všetkým betónom ApplicationContexts, čo znamená, že sa tiež môžeme jednoducho spoľahnúť ApplicationContext ak to viac vyhovuje našej situácii:

Kontext ApplicationContext; public Resource loadEmployeesWithApplicationContext () {return context.getResource ("classpath: data / Zaměstnanci.dat"); }

3. Používanie ResourceUtils

Výhradou je, že na jar existuje ďalší spôsob, ako získať zdroje, ale ResourceUtils Javadoc je zrejmé, že trieda je určená hlavne na interné použitie.

Ak vidíme zvyklosti z ResourceUtils v našom kóde:

public File loadEmployeesWithSpringInternalClass () hodí FileNotFoundException {return ResourceUtils.getFile ("classpath: data / zaměstnanci.dat"); }

Mali by sme starostlivo zvážiť odôvodnenie ako je asi lepšie použiť jeden zo štandardných prístupov uvedených vyššie.

4. Čítanie údajov o zdrojoch

Keď už máme Zdroj, je pre nás ľahké čítať obsah. Ako sme už diskutovali, môžeme ľahko získať a Súbor alebo an InputStream odkaz z Zdroj.

Poďme si predstaviť, že máme nasledujúci súbor, údaje / zamestnanci.dat, na triednej ceste:

Joe Employee, Jan Employee, James T. Employee

4.1. Čítanie ako a Súbor

Teraz môžeme čítať jeho obsah volaním getFile:

@ Test public void whenResourceAsFile_thenReadSuccessful () vyvolá IOException {File resource = new ClassPathResource ("data / Zaměstnanci.dat"). GetFile (); Pracovníci reťazca = nový reťazec (Files.readAllBytes (resource.toPath ())); assertEquals ("Joe Employee, Jan Employee, James T. Employee", zamestnanci); }

Aj keď si uvedomte, že tento prístup očakáva, že zdroj bude prítomný v súborovom systéme a nie v súbore jar.

4.2. Čítanie ako InputStream

Povedzme však, že náš zdroj je vo vnútri pohára.

Potom môžeme prečítať a Zdroj ako InputStream:

@ Test public void whenResourceAsStream_thenReadSuccessful () vyvolá IOException {InputStream resource = new ClassPathResource ("data / Zaměstnanci.dat"). GetInputStream (); try (čítačka BufferedReader = nový BufferedReader (nový InputStreamReader (zdroj))) {Pracovníci reťazca = reader.lines () .collect (Collectors.joining ("\ n")); assertEquals ("Joe Employee, Jan Employee, James T. Employee", zamestnanci); }}

5. Záver

V tomto rýchlom článku sme videli niekoľko spôsobov, ako získať prístup a prečítať zdroj z cesty triedy pomocou jari, vrátane dychtivého a lenivého načítania a na súborovom systéme alebo v pohári.

A ako vždy, všetky tieto príklady som zverejnil na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found