Tutorial Java: Mengenal NIO – Path
Tutorial Information
Program | Java |
Version | JDK 7+ |
Difficulty | Pemula - Standar |
Estimated Time | 30 Menit |
Download | Click this link |
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 p3 = FileSystems.getDefault().getPath( "/tmp/foo" ); Path p4 = Paths.get(System.getProperty( "user.home" ), "tmp" , "foo" ); |
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()); |
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()); |
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()); |
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()); |
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()); |
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" ); } |
0 komentar:
Posting Komentar