Blogroll

Kamis, 11 Juni 2015

Tutorial Java: Mengenal NIO – Path

Tutorial Information

ProgramJava
VersionJDK 7+
DifficultyPemula - Standar
Estimated Time30 Menit
DownloadClick this link
Hingga saat ini versi JDK yang terbaru yang dapat anda unduh dari oracle adalah JDK 7 yang di release pada tanggal 28 Juli 2011 lalu. Pada JDK 6, materi yang berkaitan dengan Input dan Output (I/O) adalah Basic I/O yang hanya memuat seputar Input Streams dan Output Streams. Pada kesempatan kali ini, penulis akan mencoba berbagi ilmu mengenai sebuah fitur pada JDK 7 yaitu mengenai New File I/O yang berada dalam package java.nio. Untuk installer JDK 7 tersebut anda dapat mencoba mengunduhnya di sini.
File I/O berfokus pada  bagaimana mengelolah file berdasarkan path yang dimilikinya. Untuk memudahkan anda memahami bagaimana File I/O bekerja, anda dapat mempelajari terlebih dahulu apakah itu Path. Lihatlah gambar berikut untuk lebih jelasnya.

Sebuah file dikenali berdasarkan path yang dimilikinya, dimulai dari root. Untuk file statusReport, path yang dimilikinya adalah C:\home\sally\statusReport (untuk windows) atau /home/sally/statusReport (untuk Solaris). Perlu diperhatikan bahwa setiap Sistem Operasi memiliki format sistem file seperti delimiter dan root yang berbeda-beda.
Sebuah path bisa berupa relative atau absolute. C:\home\sally\statusReport adalah contoh dari absolute path. Semua informasi yang dibutuhkan untuk menunjuk pada sebuah file status report terdapat pada string tersebut. joe\foe adalah contoh dari relative path, tanpa informasi tambahan path tersebut tidak dapat ditelusuri.
Sekarang anda dapat mencoba memulai melakukan beberapa operasi terhadap class Path yang terdapat pada package java.nio.

Membuat sebuah Path

Untuk membuat sebuah path anda dapat menyertakan sebuah string dari absolute path ataupun hanya sepotong pendek string yang memuat relative path sebagai parameter dari method get yang dimiliki oleh class Paths. Tidak ada ketentuan khusus yang perlu diperhatikan untuk membuat sebuah path.
1
2
3
4
Path p1 = Paths.get("/tmp/foo");
Path p2 = Paths.get(URI.create("file:///tmp/foo"));
Path p3 = FileSystems.getDefault().getPath("/tmp/foo");
Path p4 = Paths.get(System.getProperty("user.home"), "tmp", "foo");
Dari contoh di atas p1,p2,dan p3 akan menghasilkan path yang sama, sedangkan p4 akan menghasilkan sebuah path yang mirip namun berada tidak dibawah root secara langsung melainkan di home directory dari user.

Mendapatkan informasi dari Path

Anda dapat melihat sebuah objek path pada Java sebagai barisan dari nama-nama penyusun sebuah path. Elemen pertama memiliki index 0 sedangkan elemen terakhir akan memiliki index n-1. Berdasarkan hal tersebut anda bisa mendapatkan beberapa informasi dari path dengan menjalankan method-method tertentu milik class Path.
1
2
3
4
5
6
7
8
Path path = Paths.get("C:\\home\\joe\\foo");    // Microsoft Windows syntax
System.out.format("toString: %s%n", path.toString());
System.out.format("getFileName: %s%n", path.getFileName());
System.out.format("getName(0): %s%n", path.getName(0));
System.out.format("getNameCount: %d%n", path.getNameCount());
System.out.format("subpath(0,2): %s%n", path.subpath(0,2));
System.out.format("getParent: %s%n", path.getParent());
System.out.format("getRoot: %s%n", path.getRoot());
Berikut adalah tampilan yang seharusnya didapat.

Menghilangkan redundancies dari Path (Normalize)

Sebagian besar sistem file menggunakan notasi “.” untuk menunjukkan direktori saat ini dan “..” untuk menunjukkan direktori diatasnya. Jika anda menemukan situasi dimana anda menjumpai notasi tersebut dalam sebuah Path dan ingin menghapusnya, anda dapat menajalankan method normalize milik class Path untuk menghilangkan redundancies tersebut.
1
2
3
Path path = Paths.get("/home/sally/../joe/foo");
path = path.normalize();
System.out.println("Hasil normalize= " + path.toString());
Berikut adalah tampilan yang seharusnya didapat.

Mengkonversi sebuah Path

Ada 3 konversi yang dapat dilakukan pada sebuah objek Path. Yang pertama adalah menjadikan URI yang dapat dibaca oleh browser, kedua adalah absolute path, ketiga adalah real path. Hasil konversi dari path menjadi URI berupa sebuah string yang dapat diinputkan ke browser. Konversi menjadi absolute path bergantung pada direktori yang sedang aktif pada saat aplikasi dijalankan. Konversi menjadi real path adalah perubahan path menjadi absolute path dari file atau direktori yang benar-benar ada. Jika file atau direktori tidak ditemukan maka akan terjadi IOException.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Path path = Paths.get("C:/Program Files/java");
System.out.println("Path awal= " + path.toString());
System.out.println("Hasil toUri= " + path.toUri());
 
System.out.println("");
 
path = Paths.get("/Program Files/java");
System.out.println("Path awal= " + path.toString());
path = path.toAbsolutePath();
System.out.println("Hasil toAbsolutePath= " + path.toString());
 
System.out.println("");
 
path = Paths.get("/Program Files/java");
System.out.println("Path awal= " + path.toString());
path = path.toRealPath();
System.out.println("Hasil toRealPath= " + path.toString());
Berikut adalah tampilan yang seharusnya didapat.

Menggabungkan 2 Path

Anda dapat menggabungkan sebuah path ke path lainnya dengan method resolve milik class Path. Jika parameter yang disertakan adalah sebuah relative path maka akan ditambahkan diakhir, jika yang disertakan adalah absolute path maka akan digantikan.
1
2
3
4
5
6
7
8
9
10
11
Path p1 = Paths.get("C:/Program Files");
Path p2 = Paths.get("Java");
Path p3 = p1.resolve(p2);
System.out.println("Hasil resolve dengan relative path= " + p3.toString());
 
System.out.println("");
 
p1 = Paths.get("C:/Program Files");
p2 = Paths.get("/Java");
p3 = p1.resolve(p2);
System.out.println("Hasil resolve dengan absolute path= " + p3.toString());
Berikut adalah tampilan yang seharusnya didapat.

Membuat sebuah  relative path dari 2 path

Salah satu persyaratan umum yang harus dimiliki oleh sebuah I/O program adalah kemampuan untuk membuat suatu path dari suatu lokasi ke lokasi lainnya. Hal ini diterapkan pada Java dengan menggunakan method relativize yang dimiliki class Path. Dengan method ini anda bisa membuat suatu relative path yang dapat menunjukkan jalan dari suatu lokasi ke lokasi lainnya.
1
2
3
4
5
6
7
Path p1 = Paths.get("/Program Files/Java/JDK");
Path p2 = Paths.get("/Program Files");
 
Path p3 = p1.relativize(p2);
System.out.println("Relative path from p1 to p2= " + p3.toString());
Path p4 = p2.relativize(p1);
System.out.println("Relative path from p2 to p1= " + p4.toString());
Berikut adalah tampilan yang seharusnya didapat.

Membandingkan 2 Path

Anda juga dapat membandingkan path satu dengan path lainnya untuk mengecek apakah path tersebut sama dengan method equals milik class Path.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Path p1 = Paths.get("/Program Files");
Path p2 = Paths.get("/Program Files");
Path p3 = Paths.get("/Program Files/Java");
 
if (p1.equals(p2)) {
    System.out.println("p1 equal with p2");
} else {
    System.out.println("p1 not equal with p2");
}
if (p1.equals(p3)) {
    System.out.println("p1 equal with p3");
} else {
    System.out.println("p1 not equal with p3");
}
Berikut adalah tampilan yang seharusnya didapat.

Penutup

Dengan menguasai dasar NIO untuk Path ini, Anda bisa mengolah file Anda dengan program Java secara lebih mudah. Dengan mengkombinasikannya bersama cara pengolahan file yang lain, tentu bisa menciptakan flow yang menarik, dengan kode program yang rapi. Selamat mencoba!

0 komentar:

Posting Komentar