1. Gambaran keseluruhan
Ini adalah tugas yang mudah untuk mendapatkan direktori kerja terkini di Java, tetapi sayangnya, tidak ada API langsung yang tersedia di JDK untuk melakukan ini.
Dalam tutorial ini, kita akan belajar bagaimana mendapatkan direktori kerja terkini di Java dengan java.lang. Sistem , java.io.File, java.nio.file.FileSystems, dan java.nio.file.Paths .
2. Sistem
Mari kita mulakan dengan penyelesaian standard menggunakan System # getProperty , dengan anggapan nama direktori kerja semasa kami adalah Baeldung di seluruh kod:
static final String CURRENT_DIR = "Baeldung"; @Test void whenUsingSystemProperties_thenReturnCurrentDirectory() { String userDirectory = System.getProperty("user.dir"); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }
Kami menggunakan user.dir kunci sifat bawaan Java untuk mengambil direktori kerja semasa dari peta harta tanah Sistem . Penyelesaian ini berfungsi di semua versi JDK.
3. Fail
Mari lihat penyelesaian lain menggunakan java.io.File :
@Test void whenUsingJavaIoFile_thenReturnCurrentDirectory() { String userDirectory = new File("").getAbsolutePath(); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }
Di sini, File # getAbsolutePath menggunakan Sistem # getProperty secara dalaman untuk mendapatkan nama direktori, serupa dengan penyelesaian pertama kami. Ini adalah penyelesaian yang tidak standard untuk mendapatkan direktori kerja semasa, dan berfungsi di semua versi JDK.
4. Sistem Fail
Alternatif lain yang sah adalah menggunakan API java.nio.file.FileSystems baru :
@Test void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() { String userDirectory = FileSystems.getDefault() .getPath("") .toAbsolutePath() .toString(); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }
Penyelesaian ini menggunakan Java NIO API baru, dan hanya berfungsi dengan JDK 7 atau lebih tinggi .
5. Jalan
Dan akhirnya, mari kita lihat penyelesaian yang lebih mudah untuk mendapatkan direktori semasa menggunakan java.nio.file.Paths API:
@Test void whenUsingJavaNioPaths_thenReturnCurrentDirectory() { String userDirectory = Paths.get("") .toAbsolutePath() .toString(); assertTrue(userDirectory.endsWith(CURRENT_DIR)); }
Di sini, Paths # get secara dalaman menggunakan FileSystem # getPath untuk mengambil jalan. Ia menggunakan Java NIO API baru, jadi penyelesaian ini hanya berfungsi dengan JDK 7 atau lebih tinggi .
6. Kesimpulannya
Dalam tutorial ini, kami meneroka empat cara berbeza untuk mendapatkan direktori kerja terkini di Java. Dua penyelesaian pertama berfungsi di semua versi JDK sedangkan dua penyelesaian terakhir hanya berfungsi dengan JDK 7 atau lebih tinggi.
Kami mengesyorkan menggunakan penyelesaian Sistem kerana ia cekap dan lurus ke depan, kami dapat mempermudahnya dengan membungkus panggilan API ini dalam kaedah utiliti statik dan mengaksesnya secara langsung.
Kod sumber untuk tutorial ini boleh didapati di GitHub - ini adalah projek berasaskan Maven, jadi mudah diimport dan dijalankan sebagaimana mestinya.