Hozzáférés egy fájlhoz az Osztályútvonalról egy tavaszi alkalmazásban

1. Bemutatkozás

Ebben az oktatóanyagban megismerhetjük az osztályútvonalon lévő fájl tartalmának elérésének és betöltésének különféle módjait a Spring használatával.

2. Használata Forrás

A Forrás interfész segít elvonatkoztatni az alacsony szintű erőforrásokhoz való hozzáférést. Valójában mindenféle fájlforrás egységes módon történő kezelését támogatja.

Kezdjük azzal, hogy megvizsgáljuk a Forrás példa.

2.1. Manuálisan

Egy erőforrás eléréséhez az osztályútról egyszerűen használhatjuk ClassPathResource:

public Resource loadEmployeesWithClassPathResource () {return new ClassPathResource ("adatok / alkalmazottak.dat"); }

Alapértelmezés szerint, ClassPathResource eltávolít néhány kazántáblát a szál kontextusú classloader és az alapértelmezett rendszer classloader közötti választáshoz.

Ugyanakkor azt is megadhatjuk, hogy a classloader közvetlenül használja:

return new ClassPathResource ("adatok / alkalmazottak.dat", ez.getClass (). getClassLoader ());

Vagy közvetve egy meghatározott osztályon keresztül:

return new ClassPathResource ("adatok / alkalmazottak.dat", Employee.class.getClassLoader ());

Vegye figyelembe, hogy a Forrás, könnyen átugorhatunk Java szabványos reprezentációkat, mint például InputStream vagy File.

Egy másik dolog, amit itt meg kell jegyeznünk, hogy a fenti módszer csak abszolút utakon működik. Ha meg akar adni egy relatív elérési utat, akkor átadhat egy másodpercet osztály érv. Az út viszonylagos lesz ehhez az osztályhoz:

új ClassPathResource ("../../../ adatok / alkalmazottak.dat", Példa.osztály) .getFile ();

A fenti fájl elérési útja a Példa osztály.

2.2. Használata @Érték

Injekciózhatunk a Forrás val vel @Érték:

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

És @Érték támogatja a többi előtagot is, mint a fájl: és URL:.

2.3. A ResourceLoader használatával

Vagy ha lustán meg akarjuk tölteni az erőforrásunkat, használhatjuk ResourceLoader:

@Autowired ResourceLoader resourceLoader;

És akkor lekérjük az erőforrásunkat getResource:

public Resource loadEmployeesWithResourceLoader () {return resourceLoader.getResource ("osztályút: adatok / alkalmazottak.dat"); }

Jegyezd meg azt is ResourceLoader minden konkrét megvalósítja ApplicationContexts, ami azt jelenti, hogy egyszerűen függhetünk is tőlünk ApplicationContext ha ez jobban megfelel a helyzetünknek:

ApplicationContext kontextus; nyilvános erőforrás loadEmployeesWithApplicationContext () {return context.getResource ("osztályút: adatok / alkalmazottak.dat"); }

3. Használata ResourceUtils

Figyelmeztetésként van egy másik módja az erőforrások lekérésének tavasszal, de a ResourceUtils A javadoc egyértelmű, hogy az osztály elsősorban belső használatra szolgál.

Ha látjuk a ResourceUtils kódunkban:

public File loadEmployeesWithSpringInternalClass () fájlt dobja a FileNotFoundException {return ResourceUtils.getFile ("osztályút: adatok / alkalmazottak.dat"); }

Alaposan meg kell fontolnunk az indoklást valószínűleg jobb a fenti szokásos megközelítések egyikét használni.

4. Erőforrás-adatok olvasása

Miután megvan a Forrás, könnyen olvashatjuk a tartalmát. Mint már tárgyaltuk, könnyen megszerezhetjük a File vagy egy InputStream hivatkozás a Forrás.

Képzeljük el, hogy a következő fájl van, adatok / alkalmazottak.dat, az osztályúton:

Joe alkalmazott, Jan alkalmazott, James T. alkalmazott

4.1. Olvasás mint a File

Most telefonon elolvashatjuk a tartalmát getFile:

@Test public void whenResourceAsFile_thenReadSuccessful () dobja az IOException {File erőforrás = új ClassPathResource ("adatok / alkalmazottak.dat"). GetFile (); String alkalmazottak = new String (Files.readAllBytes (resource.toPath ())); assertEquals ("Joe Employee, Jan Employee, James T. Employee", alkalmazottak); }

Bár vegye figyelembe, hogy ez a megközelítés arra számít, hogy az erőforrás a fájlrendszerben lesz, és nem egy jar fájlban.

4.2. Olvasás mint InputStream

Mondjuk mégis, hogy az erőforrásunk van egy korsó belsejében.

Ezután ehelyett elolvashatjuk a Forrás mint egy InputStream:

@Test public void whenResourceAsStream_thenReadSuccessful () dobja az IOException {InputStream erőforrás = új ClassPathResource ("adatok / alkalmazottak.dat"). GetInputStream (); try (BufferedReader olvasó = new BufferedReader (új InputStreamReader (erőforrás))) {String alkalmazottak = reader.lines () .collect (Collectors.joining ("\ n")); assertEquals ("Joe Employee, Jan Employee, James T. Employee", alkalmazottak); }}

5. Következtetés

Ebben a gyors cikkben néhány módszert láthattunk az osztály elérési útjának erőforrásainak elérésére és elolvasására a Spring használatával, ideértve a lelkes és lusta betöltést, a fájlrendszeren vagy egy korsóban.

És mint mindig, ezeket a példákat is közzétettem a GitHub-on.