รับไดเร็กทอรีการทำงานปัจจุบันใน Java

1. ภาพรวม

เป็นเรื่องง่ายที่จะรับไดเร็กทอรีการทำงานปัจจุบันใน Java แต่น่าเสียดายที่ไม่มี API โดยตรงใน JDK เพื่อทำสิ่งนี้

ในบทช่วยสอนนี้เราจะเรียนรู้วิธีรับไดเร็กทอรีการทำงานปัจจุบันใน Java ด้วยjava.lang ระบบ , java.io.File, java.nio.file.FileSystems,และjava.nio.file.Paths

2. ระบบ

เริ่มต้นด้วยโซลูชันมาตรฐานโดยใช้System # getPropertyโดยสมมติว่าชื่อไดเร็กทอรีการทำงานปัจจุบันของเราคือBaeldungตลอดทั้งรหัส:

static final String CURRENT_DIR = "Baeldung"; @Test void whenUsingSystemProperties_thenReturnCurrentDirectory() { String userDirectory = System.getProperty("user.dir"); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }

เราใช้user.dirคีย์คุณสมบัติในตัวของ Java เพื่อดึงไดเร็กทอรีการทำงานปัจจุบันจากแผนที่คุณสมบัติของระบบ โซลูชันนี้ใช้ได้กับ JDK ทุกเวอร์ชัน

3. ไฟล์

มาดูวิธีแก้ปัญหาอื่นโดยใช้java.io.File :

@Test void whenUsingJavaIoFile_thenReturnCurrentDirectory() { String userDirectory = new File("").getAbsolutePath(); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }

ที่นี่File # getAbsolutePathภายในใช้System # getPropertyเพื่อรับชื่อไดเร็กทอรีซึ่งคล้ายกับโซลูชันแรกของเรา เป็นโซลูชันที่ไม่เป็นมาตรฐานในการรับไดเร็กทอรีการทำงานปัจจุบันและใช้ได้กับเวอร์ชัน JDK ทั้งหมด

4. FileSystems

อีกทางเลือกหนึ่งที่ถูกต้องคือการใช้java.nio.file.FileSystems API ใหม่:

@Test void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() { String userDirectory = FileSystems.getDefault() .getPath("") .toAbsolutePath() .toString(); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }

วิธีการแก้ปัญหานี้ใช้ใหม่ Java NIO API และมันทำงานได้เฉพาะกับJDK 7 หรือสูงกว่า

5. เส้นทาง

และในที่สุดเรามาดูวิธีที่ง่ายกว่าในการรับไดเร็กทอรีปัจจุบันโดยใช้java.nio.file.Paths API:

@Test void whenUsingJavaNioPaths_thenReturnCurrentDirectory() { String userDirectory = Paths.get("") .toAbsolutePath() .toString(); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }

ที่นี่Paths #ใช้ภายในFileSystem # getPathเพื่อดึงเส้นทาง ใช้ Java NIO API ใหม่ดังนั้นโซลูชันนี้จึงใช้ได้กับJDK 7 หรือสูงกว่าเท่านั้น

6. บทสรุป

ในบทช่วยสอนนี้เราได้สำรวจวิธีต่างๆสี่วิธีในการรับไดเร็กทอรีการทำงานปัจจุบันใน Java สองโซลูชันแรกใช้งานได้กับ JDK ทุกเวอร์ชันในขณะที่สองวิธีสุดท้ายใช้งานได้กับ JDK 7หรือสูงกว่าเท่านั้น

เราขอแนะนำให้ใช้โซลูชันระบบเนื่องจากมีประสิทธิภาพและตรงไปตรงมาเราสามารถทำให้ง่ายขึ้นโดยการรวมการเรียก API นี้ด้วยวิธียูทิลิตี้แบบคงที่และเข้าถึงได้โดยตรง

ซอร์สโค้ดสำหรับบทช่วยสอนนี้มีให้ใช้งานบน GitHub ซึ่งเป็นโครงการที่ใช้ Maven ดังนั้นจึงควรนำเข้าและเรียกใช้ตามที่เป็นอยู่ได้ง่าย