{tocify} $title={Daftar Isi}
Pendahuluan:
Suatu program/aplikasi akan membutuhkan sebuah nilai untuk dapat menjalankan sebuah proses tertentu dimana nilai tersebut dapat dihasilkan dari nilai konstan yang telah didefinisikan di dalam kode program ataupun dari proses masukan (input) dari pengguna (user) dan memberikan hasilnya sebagai proses keluaran (output), saat ini pada sebuah program/aplikasi sangatlah umum memiliki fungsi input/output untuk memproses ataupun menyimpan suatu data sehingga dapat membuat aplikasi bergerak dinamis.
Fungsi input/output didalam bahasa pemrograman Dart telah disediakan oleh bahasa pemrograman Dart itu sendiri atau dikenal sebagai built-in function atau fungsi bawaan yang disimpan didalam sebuah library yang dikenal sebagai dart:io yang berisi class, fungsi/method ataupun objek yang dikhususkan untuk menangani proses input/output, meliputi:
- Baca tulis file serta membuat dan mengakses direktori/folder
- Baca tulis data dari jaringan web server seperti HTTP dan Websocket
- Membaca input dari keyboard
- Menampilkan output ke console
- Menulis pesan error ke console
- Membaca informasi mesin
- dsb
Adapun jenis aplikasi yang dapat menggunakan library dart:io adalah sebagai berikut:
- Server
- Command-Line
- Fluttter mobile apps, dan
- Flutter desktop apps
Oleh karenanya program/aplikasi anda mungkin akan membutuhkan library dart:io untuk dapat melakukan tugas-tugas tersebut.
Pengenalan dart:io
Library (pustaka) dart:io merupakan library pada bahasa pemrograman Dart yang menyimpan berbagai objek ataupun fungsi yang berkaitan dengan operasi input/output sehingga membuat program dapat menerima masukan (input) yang diberikan oleh pengguna (user) ataupun proses yang dijalankan oleh mesin komputer itu sendiri seperti baca tulis file, direktori ataupun file dan proses sistem yang berjalan di latar belakang. Adapun beberapa class, fungsi dan properti yang tersimpan didalam library dart:io diantaranya sebagai berikut:
Class / Method / Property | Jenis | Keterangan |
---|---|---|
close() | Method | Digunakan untuk menutup suatu proses |
exists() | Method | Digunakan untuk memeriksa keberadaan file/direktori/link |
existsSync() | Method | Digunakan untuk memeriksa keberadaan file/direktori/link secara sinkronus |
openRead() | Method | Digunakan untuk membuat Stream independen untuk membaca suatu file |
openWrite() | Method | Digunakan untuk membuat IOSink independen yang dapat membuka dan menulis String ke dalam file |
readAsStringSync() | Method | Digunakan untuk membaca isi suatu file sebagai String dengan memberikan encoding pada file dan dilakukansecara sinkronus |
readLineSync() | Method | Digunakan membaca masukan yang diterima oleh stdin secara sinkronus |
run() | Method | Digunakan untuk menjalankan sebuah proses, proses yang dijalankan merupakan proses executable dengan spesifik argumen |
runSync() | Method | Digunakan untuk menjalankan sebuah proses secara sinkronus |
writeAsString() | Method | Digunakan untuk menulis String ke dalam sebuah file |
write() | Method | Digunakan untuk menulis string |
writeln() | Method | Digunakan untuk menulis string yang dimulai dengan menambah baris baru |
File() | Class | Digunakan untuk memanipulasi file dan isi kontennya |
Directory() | Class | Digunakan untuk mengakses, membuat, memanipulasi atau menghapus suatu direktori |
Platform() | Class | Digunakan untuk membaca/menerima informasi sistem seperti sistem operasi, nama host, dll |
exitCode | Properti | Digunakan untuk keluar dari kode program |
stdin | Properti | Digunakan untuk menerima masukan melalui layar console / cli dan kemudian dibaca oleh method readLineSync() |
stdout | Properti | Digunakan untuk memberikan ouput ke layar console / cli dan output kemudian ditulis oleh method write() / writeln() |
Dikarenakan ada banyak fungsi, class ataupun properti yang tersimpan di library dart:io maka tidak semua bisa penulis jabarkan, kalian dapat merujuk ke halaman dokumentasi resminya yang telah penulis sematkan di referensi pada akhir halaman ini untuk mempelajari lebih banyak mengenai library dart:io.
Penggunaan
Anda perlu mengimport library dart:io untuk dapat menggunakan class, fungsi dan properti yang tersimpan di library tersebut, contohnya sebagai berikut:
Membaca masukan berupa string via console/cli:
import 'dart:io';
void main() {
stdout.write('Nama anda: ');
String nama = stdin.readLineSync()!;
stdout.write('Nama anda adalah: $nama');
}
Agar program dapat menerima nilai masukan yang diberikan oleh pengguna maka anda perlu menggunakan properti stdin (Standard Input) yang akan menerima/membaca nilai masukan dengan menggunakan method readlinesync untuk membaca setiap karakter masukan dalam bentuk string, untuk outputnya anda dapat menggunakan properti stdout (Standard Output) diikuti dengan method write() untuk menulis output ke layar console tanpa memindahkan kursor ke baris baru atau gunakan stdout.writeln() atau print() sehingga output ditulis setelah pointer dipindahkan ke baris baru.
Pada dasarnya ketika suatu proses i/o berjalan mungkin saja pengguna memproses null baik secara sengaja ataupun tidak, artinya pengguna tidak memasukan nilai apapun sedangkan bahasa pemrograman Dart telah menerapkan null-safety maka dari contoh di atas anda perlu menggunakan operator null-aware (!) sebelum di akhiri oleh semicolon pada method readlinesync yang dimaksudkan untuk memastikan bahwa variable dapat memiliki nilai ketika program dijalankan namun akan menghasilkan error saat tidak ada nilai apapun yang diterima, anda perlu ingat kembali bahwa variable di Dart secara default bersifat non-nullable artinya tidak boleh untuk tidak memiliki nilai sedangkan untuk merubah variable menjadi nullable anda perlu menggunakan operator (?), contohnya sebagai berikut:
import 'dart:io';
void main() {
stdout.write('Nama anda: ');
String? nama = stdin.readLineSync()!;
stdout.write('Nama anda adalah: $nama');
}
Ketika program dijalankan dan anda tidak memberi nilai apapun alias null maka program juga menghasilkan null karena compiler menganggap anda memberikan izin variable nama menjadi nullable sedangkan sebelumnya pada variable nama akan menghasilkan error karena compiler menganggap anda tidak mengizinkan variable menjadi nullable sehingga variable wajib menerima input saat dijalankan.
Jika anda ingin menginput angka maka anda perlu menggunakan method parse ataupun tryparse, contohnya sebagai berikut:
import 'dart:io';
void main() {
//non-nullable variable
stdout.write('Masukan angka: ');
int angka = int.parse(stdin.readLineSync()!);
stdout.write('Masukan angka: ');
//nullable variable
int? nilai = int.tryParse(stdin.readLineSync()!);
stdout.write('Angka anda adalah: $angka\nNilai anda adalah: $nilai');
}
Method parse dan tryparse digunakan untuk membaca nilai integer yang dimasukan perbedaanya, tryparse merupakan method yang berjalan dengan fitur null-safety sehingga ketika program dijalankan dan tidak menerima input apapun dan/atau justru menerima input berupa string maka akan menghasilkan null sementara pada method parse anda wajib memberi nilai saat program berjalan dan tidak boleh memasukan selain angka (string, huruf, karakter).
Membaca isi sebuah file:
import 'dart:io';
void main() {
//membaca file yang satu direktori dengan file latihan.dart
var konten = File('file.txt').readAsStringSync();
//membaca file yang berbeda direktori dengan file latihan.dart
var kontens = File('E:/file.txt').readAsStringSync();
print('File Contents\n---------------');
print("Satu direktori:\n$konten\n==============\nLain direktori:\n$kontens");
}
Untuk membaca isi file anda perlu menggunakan class File() dengan memberikan argumen berupa string yang menunjuk lokasi file kemudian anda perlu menambahkan method .readAsStringSync() yang akan membaca file tersebut sebagai string.
Hanya file yang di encoding dengan serial utf-8 yang dapat dibaca oleh kompiler karena secara default dart menggunakan encoding dengan serial utf-8 sehingga jika anda mendapati pesan error Failed to decode data using encoding 'utf-8' maka file yang dicoba untuk dibaca menggunakan encoding selain utf-8, dalam hal ini anda perlu membuat handler yang dapat melakukan decoding selain dengan utf-8 dengan melakukan konversi jenis serial yang digunakan namun fungsi-fungsi tersebut disimpan didalam library dart:convert.
Membaca direktori:
import 'dart:io';
void main() async{
//membaca direktori Program Files
var dir = Directory('C:/Program Files');
//memeriksa direktori
if(await dir.exists()){
print("Direktori ditemukan: \n$dir");
} else {
print("Direktori tidak ditemukan");
}
}
Untuk membaca sebuah direktori maka anda perlu menggunakan class Directory() dengan diikuti argumen/parameter didalamnya yang menunjuk pada lokasi direktori, selain itu anda juga perlu menggunakan fungsi async karena proses tersebut hanya dapat dijalankan secara asynchronous
Menulis ke file:
import 'dart:io';
void main() async {
final filename = 'file.txt';
var file = await File(filename).writeAsString('HelloWorld');
// Do something with the file.
}
Untuk dapat menulis data ke sebuah file anda bisa menggunakan method writeAsString yang mana berdasarkan alur kerjanya method tersebut akan membuka, menulis, melakukan encoding pada file dan menutup file ketika string telah ditulis ke dalam file. Secara default method writeAsString juga akan membuat file jika file tersebut belum ada dan jika file sudah ada maka semua isi string yang ada di dalam file akan diganti dengan string baru.
Penutup:
Library dart:io digunakan untuk hal-hal yang berkaitan dengan aktivitas input/output baik proses input via console, baca tulis file, direktori, http dan web server, ataupun file dan proses sistem, beberapa fungsi diatas adalah sebagian dari fungsi-fungsi yang tersimpan di library dart:io sehingga jika anda membutuhkan panduan dan dokumentasi lengkap, anda dapat mengunjungi halaman dokumentasi resminya pada bagian referensi yang telah penulis sematkan di akhir halaman ini.
Referensi:
Dart.dev - dart:io library - diakses pada 15 Mei, 2022