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.