Skaff deg den aktuelle arbeidskatalogen i Java

1. Oversikt

Det er en enkel oppgave å få den nåværende arbeidskatalogen i Java, men dessverre er det ingen direkte API tilgjengelig i JDK for å gjøre dette.

I denne opplæringen lærer vi hvordan du får den nåværende arbeidskatalogen i Java med java.lang.System, java.io.File, java.nio.file.FileSystems, og java.nio.file. stier.

2. System

La oss begynne med standardløsningen ved hjelp av System # getProperty, forutsatt at vårt nåværende arbeidskatalognavn er Baeldung gjennom hele koden:

statisk sluttstreng CURRENT_DIR = "Baeldung"; @Test ugyldig nårUsingSystemProperties_thenReturnCurrentDirectory () {String userDirectory = System.getProperty ("user.dir"); assertTrue (userDirectory.endsWith (CURRENT_DIR)); }

Vi brukte en Java-innebygd eiendomsnøkkel bruker.dir for å hente gjeldende arbeidskatalog fra System’S eiendomskart. Denne løsningen fungerer på tvers av alle JDK-versjoner.

3. Fil

La oss se en annen løsning ved hjelp java.io. fil:

@Test ugyldig nårUsingJavaIoFile_thenReturnCurrentDirectory () {String userDirectory = ny fil (""). GetAbsolutePath (); assertTrue (userDirectory.endsWith (CURRENT_DIR)); }

Her, den Fil # getAbsolutePath internt bruk System # getProperty for å få katalognavnet, som ligner på vår første løsning. Det er en ikke-standard løsning for å få den gjeldende arbeidskatalogen, og den fungerer på tvers av alle JDK-versjoner.

4. Filsystemer

Et annet gyldig alternativ ville være å bruke det nye java.nio.file.FileSystems API:

@Test ugyldig nårUsingJavaNioFileSystems_thenReturnCurrentDirectory () {String userDirectory = FileSystems.getDefault () .getPath ("") .toAbsolutePath () .toString (); assertTrue (userDirectory.endsWith (CURRENT_DIR)); }

Denne løsningen bruker det nye Java NIO API, og det fungerer bare med JDK 7 eller høyere.

5. Stier

Og til slutt, la oss se en enklere løsning for å få den nåværende katalogen til å bruke java.nio.file. stier API:

@Test ugyldig nårUsingJavaNioPaths_thenReturnCurrentDirectory () {String userDirectory = Paths.get ("") .toAbsolutePath () .toString (); assertTrue (userDirectory.endsWith (CURRENT_DIR)); }

Her, Stier # får internt bruk FileSystem # getPath å hente stien. Den bruker den nye Java NIO API, så denne løsningen fungerer bare med JDK 7 eller høyere.

6. Konklusjon

I denne opplæringen undersøkte vi fire forskjellige måter å få den nåværende arbeidskatalogen i Java. De to første løsningene fungerer på tvers av alle versjoner av JDK, mens de to siste bare fungerer med JDK 7 eller høyere.

Vi anbefaler å bruke System løsning siden den er effektiv og rett frem, kan vi forenkle den ved å pakke inn dette API-anropet i en statisk verktøymetode og få tilgang til det direkte.

Kildekoden for denne opplæringen er tilgjengelig på GitHub - det er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.