1. Pathkelas

Jika Anda ingin menulis sebuah program yang melakukan sesuatu dengan file di disk, itu cukup mudah. Java memiliki banyak kelas yang membantu Anda bekerja dengan file itu sendiri dan kontennya.

Versi awal Java menggunakan kelas seperti Filedan FileInputStreamuntuk bekerja dengan file. Namun, Filekelas tersebut sekarang tidak digunakan lagi dan tidak direkomendasikan untuk digunakan. Tentu saja, Anda mungkin masih menemukannya dalam kode, parameter metode, atau konstruktor kelas.

Sejak awal, kita akan mulai mempelajari cara bekerja dengan file menggunakan Pathkelas. Pathadalah kelas yang diganti File. Lebih aman dan lebih efisien.

Pathkelas

Secara teknis, Pathini bukan kelas — ini adalah antarmuka. Ini dilakukan untuk memungkinkan penulisan turunan dari Pathkelas untuk setiap sistem operasi (dan sistem file).

Windows memiliki satu standar untuk menulis jalur file, dan Linux memiliki standar lain. Tentu saja, ada banyak sistem operasi lain di dunia, dan masing-masing memiliki standarnya sendiri.

Itu sebabnya Pathantarmuka digunakan di mana-mana dalam metode yang bekerja dengan file, meskipun pada kenyataannya pekerjaan terjadi melalui kelas turunannya: WindowsPath, UnixPath, ...

Membuat Pathobjek

Untuk membuat Pathobjek (yang sebenarnya akan menjadi objek dari WindowsPathkelas turunan), Anda perlu menggunakan pernyataan seperti ini:

Path name = Path.of(path);

Di mana namenama variabel Path, dan pathpath ke file (atau direktori) termasuk nama file (atau direktori). Dan ofmerupakan metode statis kelas Path.

Metode ini of()digunakan untuk membuat WindowsPathobjek jika program berjalan di Windows. Jika program berjalan di Linux, maka UnixPathobjek dibuat. Anda tidak dapat membuat Pathobjek menggunakan kode seperti .new Path()

Contoh:

Kode Catatan
Path file = Path.of("c:\\projects\\note.txt");
Jalur ke file
Path directory = Path.of("c:\\projects\\");
Jalur ke direktori

File (atau direktori) tidak perlu ada untuk Pathobjek yang valid ada. Mungkin Anda hanya ingin membuat file... Sebuah Pathobjek seperti sup String: tidak terikat ke file tertentu di disk — objek hanya menyimpan jalur tertentu di disk. Itu dia.


2. Metode Pathjenis

Antarmuka Pathmemiliki beberapa metode menarik. Yang paling menarik disajikan pada tabel di bawah ini.

metode Keterangan
Path getParent()
Mengembalikan direktori induk
Path getFileName()
Mengembalikan nama file tanpa direktori
Path getRoot()
Mengembalikan direktori root dari jalur
boolean isAbsolute()
Memeriksa apakah jalur saat ini mutlak
Path toAbsolutePath()
Mengubah jalur menjadi absolut
Path normalize()
Menghapus wildcard dalam nama direktori.
Path resolve(Path other)
Membangun jalur absolut baru dari jalur absolut dan relatif.
Path relativize(Path other)
Mendapat jalur relatif dari dua jalur absolut.
boolean startsWith(Path other)
Memeriksa apakah jalur saat ini dimulai dengan jalur yang diberikan
boolean endsWith(Path other)
Memeriksa apakah jalur saat ini berakhir dengan jalur yang diberikan
int getNameCount()
Membagi jalur menjadi beberapa bagian menggunakan /pembatas.
Mengembalikan jumlah bagian.
Path getName(int index)
Membagi jalur menjadi beberapa bagian menggunakan /pembatas.
Mengembalikan bagian berdasarkan indeksnya.
Path subpath(int beginIndex, int endIndex)
Membagi jalur menjadi beberapa bagian menggunakan /pembatas.
Mengembalikan subjalur yang sesuai dengan interval yang diberikan.
File toFile()
Mengonversi Pathobjek menjadi Fileobjek yang tidak digunakan lagi
URI toUri()
Mengubah Pathobjek menjadi URIobjek

Di bawah ini adalah deskripsi singkat dari metode yang ada.


3. Membagi jalur menjadi beberapa bagian

Metode getParent()mengembalikan jalur yang menunjuk ke direktori induk untuk jalur saat ini. Terlepas dari apakah jalur ini adalah direktori atau file:

Kode Nilai
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

Metode ini getFileName()mengembalikan satu nama file (atau direktori) — apa pun yang muncul setelah pembatas terakhir:

Kode Nilai
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

Metode getRoot()mengembalikan jalur ke direktori root:

Kode Nilai
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Jalur absolut dan relatif

Ada dua jenis jalur: absolut dan relatif. Jalur absolut dimulai dari direktori root. Untuk Windows, ini mungkin foldernya c:\; untuk Linux — /direktori

Jalur relatif bermakna relatif terhadap beberapa direktori. Artinya, ini seperti ujung jalan, tetapi tanpa awal. Anda dapat mengubah jalur relatif menjadi jalur absolut dan sebaliknya

boolean isAbsolute()metode

Metode ini memeriksa apakah jalur saat ini mutlak

Kode Nilai
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()metode

Mengubah jalur menjadi absolut. Jika perlu, tambahkan direktori kerja saat ini ke dalamnya:

Kode Nilai
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()metode

Di jalur, alih-alih nama direktori, Anda dapat menulis "..", yang berarti mundur satu direktori . Normalisasi menghilangkan hal-hal ini. Contoh:

Kode Nilai
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)metode

Metode ini relativize()memungkinkan Anda membuat "perbedaan antar jalur": satu jalur relatif terhadap jalur lainnya

Kode Nilai
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
IllegalArgumentException:
kedua jalur memiliki "root" yang berbeda (disk berbeda)

Path resolve(Path other)metode

Metode resolve()melakukan kebalikan dari relativize(): ia membangun jalur absolut baru dari jalur absolut dan relatif.

Kode Nilai
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()metode

Metode ini mengembalikan Fileobjek usang yang menyimpan jalur file yang sama dengan Pathobjek tersebut.

toURI()metode

Metode mengonversi jalur ke URI standar , dan mengembalikan objek yang berisi jalur ke file:

Jalur ke file URI ke file
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt