Creative Saplings

Java – Läs en fil från resursmappen

januari 9, 2021
No Comments
Av mkyong | Senast uppdaterad: 4 september 2020
Visad: 1 368 612 | + 4.610 pv / w

I Java kan vi använda getResourceAsStream eller getResource för att läsa en fil eller flera filer från en resources -mapp eller rot till klassvägen.

Metoden getResourceAsStream returnerar en InputStream.

getResource -metoden returnerar en URL och omvandlar den normalt till en File; Fungerar inte i JAR-filen.

Filer i resursmappen

1.1 Granska filerna i src/main/resources, senare kommer vi åt filerna och skriva ut filinnehållet.

src / main / resources / database.properties
src / main / resources / json / file1.json
src / main / resources / json / file2.json
src / main / resources / json / sub / subfile1.json

1.2 Bygg som standard verktyg som Maven, Gradle eller vanlig Java-övning kommer att kopiera alla filer från src/main/resources till roten till target/classes eller build/classes. Så när vi försöker läsa en fil från src/main/resources läser vi filen från roten till projektets klassväg.

1.3 Nedan finns en JAR-filstruktur. Vanligtvis kopieras filerna i resources -mappen till roten till klassvägen.

Terminal

Hämta en fil från resursmappen.

2.1 Nedanstående exempel visar användningen av getResourceAsStream och getResource metoder för att läsa en fil json/file1.json från resources -mappen och skriva ut filinnehållet.

Obs

  • getResource -metoden fungerar inte i JAR-filen.
  • getResourceAsStream -metoden fungerar överallt.
FileResourcesUtils.java

Output

Terminal

2.2 Nu packar vi projektet i en JAR-fil och kör det; den här gången kommer getResource att misslyckas och returnerar antingen NoSuchFileException eller InvalidPathException. Vi kan inte läsa filerna i JAR-filen via resurs-URL.

Kör JAR-filen på Linux (Ubuntu), den kastar NoSuchFileException.

Terminal

Kör JAR-filen på Windows, den kastar InvalidPathException.

Terminal

PS Detta exempel använder Maven-plugin maven-jar-plugin för att skapa JAR-filen.

pom.xml

Hämta en fil från resursmappen – Enhetstest

3.1 Vi lägger testresurserna till mappen src/test/resources för enhetstester. Vanligtvis kopieras filerna i testresurserna till mappen target/test-classes.

src / test / resources / json / file1.json
src / test / resources / database.properties

3.2 Det fungerar på samma sätt som vi läser filen från src/main/resources. Vi använder samma getResourceAsStream och getResource metoder för att läsa filen från src/test/resources.

FileResourcesTest.java

Output

Terminal

Hämta alla filer från en resursmapp. (NON-JAR-miljö)

Om vi inte vet exakt filnamn och vill läsa alla filer, inklusive undermappsfiler från en resursmapp, kan vi använda NIO Files.walk för att enkelt komma åt och läsa filerna.

4.1 Nedanstående exempel använder Files.walk för att läsa alla filer från en mapp src/main/resources/json:

FileResourcesUtils.java

Output

Terminal

4.2 Standard Files.walk i exempel 4.1 kan inte komma åt filerna i JAR-filen direkt, försök köra exemplet 4.1 i en JAR-miljö och det kastar FileSystemNotFoundException.

Terminal

Hämta alla filer från en resursmapp. (JAR-version)

5.1 Detta exempel visar hur man Files.walk en mapp i en JAR-fil via FileSystems och URI jar:file:xxx.jar.

Tanken är:

  • Fil går mappen i en JAR-fil med FileSystems, och få allt filnamn, se getPathsFromResourceJAR()
  • Loop hela filnamnet, få åtkomst till och skriv ut varje fil som exempel 2.1, se getFileFromResourceAsStream().
FileResourcesUtils.java

Utdata

Terminal

Hämta källkod

$ git klon https://github.com/mkyong/core-java

$ cd java-io

  • Files.walk JavaDoc
  • CodeSource JavaDoc
  • RFC 2396 – Syntax och format för en URI
  • Maven – Skapa JAR-fil
  • Zip File System Provider
  • Java Files.promenad exempel
  • Java – Få sökvägen till en JAR-fil som körs

mkyong

Grundare av Mkyong.com, älskar Java och öppen källkod. Följ honom på Twitter. Om du gillar mina självstudier, överväga att donera till dessa välgörenhetsorganisationer.

Articles
Previous Post

Hur tar jag en skärmdump på en bärbar Dell-dator (med bilder)

Next Post

PMC (Svenska)

Lämna ett svar Avbryt svar

Senaste inläggen

  • Världens bästa fotoskolor, 2020
  • Suveräna medborgare tar sin regeringsfilosofi mot vägarna
  • Guide för reparation av stuckaturer
  • Muckrakers (Svenska)
  • Precision Oncology (Svenska)

Arkiv

  • februari 2021
  • januari 2021
  • december 2020
  • november 2020
  • oktober 2020
  • september 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.