Masukkan Password
47 5.2 How to Write Files in Dart Programming Language | Dart File Handling | Learn Dart | Dart Course
Di materi ini kita lanjut dari membaca file ke menulis dan memperbarui file menggunakan Dart.
Seperti sebelumnya, ada beberapa bagian caption yang salah dengar:
- “DOT programming language” → Dart programming language
- “iio / do IO” →
dart:io - “write as string sync” →
writeAsStringSync() - “file mode dot append” →
FileMode.append - “backspace n / back sln” →
\n, yaitu karakter new line/baris baru - “hello word” → kemungkinan maksudnya Hello World
1. Apa yang dipelajari?
Pada tutorial sebelumnya kita belajar:
Membaca file
Sekarang kita belajar:
Menulis dan memperbarui file
Ada 3 bagian utama:
- Membuat/menulis file
.txt - Mengubah atau menambahkan isi file yang sudah ada
- Membuat dan menulis file
.csv
Gambaran besarnya:
Program Dart
│
├── writeAsStringSync()
│
▼
File
Kalau membaca:
File
│
│ readAsStringSync()
▼
Program Dart
Jadi arah datanya berbeda.
2. Import dart:io
Sama seperti ketika membaca file, kita membutuhkan:
import 'dart:io';
Contoh:
import 'dart:io';
void main() {
// kode kita
}
Library dart:io menyediakan class dan fungsi untuk melakukan operasi input/output, termasuk:
- membaca file
- membuat file
- menulis file
- menghapus file
- bekerja dengan folder
- dan lain-lain
3. Membuat objek File
Misalnya kita ingin membuat file bernama:
new_file.txt
Kita bisa menulis:
File file = File('new_file.txt');
Perhatikan:
File file = File('new_file.txt');
Bagian:
File
adalah class.
Bagian:
file
adalah nama variable.
Sedangkan:
File('new_file.txt')
menunjukkan file yang ingin kita gunakan.
4. Menulis isi ke file
Sekarang kita gunakan:
writeAsStringSync()
Contoh:
import 'dart:io';
void main() {
File file = File('new_file.txt');
file.writeAsStringSync('Hello World');
}
Setelah program dijalankan, file:
new_file.txt
akan memiliki isi:
Hello World
5. Hal penting: File() tidak selalu berarti file langsung dibuat
Ini konsep yang sering membingungkan pemula.
Ketika kita menulis:
File file = File('new_file.txt');
jangan langsung menganggap:
“File sudah dibuat.”
Lebih tepatnya:
Kita membuat objek
Fileyang menunjuk ke lokasinew_file.txt.
Ketika kita melakukan:
file.writeAsStringSync('Hello World');
barulah Dart melakukan operasi penulisan ke file tersebut. Jika file belum ada, operasi ini dapat membuatnya.
Jadi alurnya:
File('new_file.txt')
↓
Objek File menunjuk lokasi
↓
writeAsStringSync()
↓
Tulis data
↓
new_file.txt
6. Bagaimana kalau path salah?
Misalnya kita menulis:
File(r'C:\Users\Budi\Desktop\new_file.txt');
Tetapi ternyata username atau foldernya salah.
Maka program bisa menghasilkan exception/error karena Dart tidak dapat menemukan atau mengakses lokasi tersebut.
Misalnya kamu menulis:
C:\Users\Budi\Desktop
padahal username Windows sebenarnya:
C:\Users\Andi\Desktop
maka path tersebut tidak benar.
Karena itu, saat menggunakan absolute path, kita harus memastikan path-nya benar.
7. Relative path lebih sederhana
Kalau file berada di current working directory, kita bisa cukup menggunakan:
File('new_file.txt');
Misalnya current working directory:
C:\Project\Dart
maka:
File('new_file.txt')
mengarah ke:
C:\Project\Dart\new_file.txt
8. Mengubah isi file
Misalnya sebelumnya:
Hello World
Kemudian kita menjalankan:
file.writeAsStringSync('Welcome to Dart');
Maka isi file menjadi:
Welcome to Dart
Isi sebelumnya diganti.
Ini sangat penting.
Secara default:
writeAsStringSync()
akan menulis ulang isi file.
Jadi misalnya file awal:
Hello World
lalu:
file.writeAsStringSync('Dart Programming');
hasilnya:
Dart Programming
Bukan:
Hello World
Dart Programming
9. Analogi writeAsStringSync()
Bayangkan file adalah sebuah papan tulis.
Awalnya:
┌────────────────────┐
│ Hello World │
└────────────────────┘
Kemudian kita menjalankan:
file.writeAsStringSync('Hello Dart');
Seolah-olah kita menghapus isi lama:
┌────────────────────┐
│ │
└────────────────────┘
kemudian menulis:
┌────────────────────┐
│ Hello Dart │
└────────────────────┘
Jadi default-nya adalah overwrite.
10. Kalau ingin menambahkan isi tanpa menghapus isi lama?
Nah, ini yang disebut:
Append
Append berarti:
Menambahkan data baru di bagian akhir file.
Misalnya file awal:
Hello World
Kita ingin menambahkan:
Welcome to Dart
sehingga hasil akhirnya:
Hello World
Welcome to Dart
Kita menggunakan:
FileMode.append
Contoh:
import 'dart:io';
void main() {
File file = File('new_file.txt');
file.writeAsStringSync(
'Welcome to Dart',
mode: FileMode.append,
);
}
11. Apa fungsi FileMode.append?
Perhatikan:
file.writeAsStringSync(
'Welcome to Dart',
mode: FileMode.append,
);
Ada dua bagian penting.
Data
'Welcome to Dart'
Ini adalah data yang ingin kita tulis.
Mode
FileMode.append
Ini memberitahu Dart:
Jangan hapus isi lama. Tambahkan data baru di bagian akhir.
12. writeAsStringSync() tanpa append vs dengan append
Ini perbedaan yang wajib kamu pahami.
Tanpa append
file.writeAsStringSync('Hello');
Misalnya file awal:
Welcome
hasil:
Hello
Isi lama diganti.
Dengan append
file.writeAsStringSync(
'Hello',
mode: FileMode.append,
);
Misalnya file awal:
Welcome
hasil:
WelcomeHello
Perhatikan sesuatu yang penting:
Append tidak otomatis menambahkan baris baru.
Kalau kita ingin hasil:
Welcome
Hello
kita harus menambahkan \n.
13. Apa itu \n?
\n berarti:
New line / baris baru
Contoh:
file.writeAsStringSync(
'\nHello',
mode: FileMode.append,
);
Misalnya isi file:
Welcome
setelah append:
Welcome
Hello
Karena:
\n
memerintahkan:
Pindah ke baris berikutnya.
14. Contoh sederhana \n
Misalnya:
print('Hello\nWorld');
Hasil:
Hello
World
Karena:
Hello
kemudian:
\n
kemudian:
World
15. Menambahkan banyak baris
Misalnya kita ingin menambahkan:
Andi
Budi
Citra
kita bisa:
file.writeAsStringSync(
'\nAndi\nBudi\nCitra',
mode: FileMode.append,
);
Hasilnya:
data sebelumnya
Andi
Budi
Citra
Alurnya:
\nAndi
↓
pindah baris → tulis Andi
\nBudi
↓
pindah baris → tulis Budi
\nCitra
↓
pindah baris → tulis Citra
16. Sekarang masuk ke CSV
Bagian berikutnya adalah membuat file:
.csv
CSV = Comma-Separated Values.
Artinya data biasanya dipisahkan dengan tanda koma:
,
Contoh:
name,phone
Budi,08123456789
Andi,08234567890
17. Struktur file CSV
CSV biasanya memiliki:
- Header
- Data/record
Contoh:
name,phone
Budi,08123456789
Andi,08234567890
Baris pertama:
name,phone
adalah header.
Artinya kolom yang tersedia:
name
phone
Baris kedua:
Budi,08123456789
adalah data.
Baris ketiga:
Andi,08234567890
adalah data berikutnya.
18. Membuat CSV dengan Dart
Contoh sederhana:
import 'dart:io';
void main() {
File file = File('data.csv');
file.writeAsStringSync(
'name,phone\nBudi,08123456789',
);
}
Setelah program dijalankan, file:
data.csv
berisi:
name,phone
Budi,08123456789
19. Mari kita bedah kode CSV tersebut
Kode:
'name,phone\nBudi,08123456789'
sebenarnya terdiri dari:
name
lalu:
,
lalu:
phone
kemudian:
\n
kemudian:
Budi
lalu:
,
lalu:
08123456789
Jadi:
name,phone
Budi,08123456789
20. Menambahkan record baru ke CSV
Misalnya sekarang file kita:
name,phone
Budi,08123456789
Kita ingin menambahkan:
Andi,08234567890
Kita menggunakan append:
file.writeAsStringSync(
'\nAndi,08234567890',
mode: FileMode.append,
);
Hasil:
name,phone
Budi,08123456789
Andi,08234567890
21. Menambahkan beberapa record sekaligus
Misalnya ingin menambahkan:
Andi,08234567890
Citra,08345678901
Doni,08456789012
Kode:
file.writeAsStringSync(
'\nAndi,08234567890'
'\nCitra,08345678901'
'\nDoni,08456789012',
mode: FileMode.append,
);
Hasil:
name,phone
Budi,08123456789
Andi,08234567890
Citra,08345678901
Doni,08456789012
22. Kenapa CSV menggunakan koma?
Karena CSV pada dasarnya menggunakan delimiter untuk memisahkan data.
Misalnya:
Budi,08123456789
bisa kita pahami sebagai:
Budi
↓
kolom name
08123456789
↓
kolom phone
Secara konsep:
name phone
↓ ↓
Budi , 08123456789
Koma memberitahu program:
“Setelah koma, ini adalah kolom berikutnya.”
23. Bedanya TXT dan CSV
| TXT | CSV |
|---|---|
| File teks biasa | File data berbentuk tabel |
| Format lebih bebas | Biasanya menggunakan delimiter |
| Tidak harus punya kolom | Umumnya memiliki kolom |
Contoh: Hello World | Contoh: Budi,20,Indonesia |
| Cocok untuk teks | Cocok untuk data terstruktur sederhana |
Contoh TXT:
Hello, welcome to my application.
This is a simple text file.
CSV:
name,age,country
Budi,20,Indonesia
Andi,22,Malaysia
24. Jangan mengira CSV otomatis menjadi Excel
Ini juga penting.
File:
data.csv
adalah file teks dengan format CSV.
Excel bisa membuka CSV dan menampilkannya seperti tabel:
| name | phone |
|---|---|
| Budi | 08123456789 |
| Andi | 08234567890 |
Tetapi sebenarnya isi file secara mentah tetap seperti:
name,phone
Budi,08123456789
Andi,08234567890
Jadi Excel hanya membantu menampilkan dan mengolah data CSV dalam bentuk tabel.
25. Contoh program CSV yang lebih lengkap
Misalnya kita ingin membuat CSV dengan header dan beberapa data:
import 'dart:io';
void main() {
File file = File('users.csv');
file.writeAsStringSync(
'name,phone\n'
'Budi,08123456789\n'
'Andi,08234567890\n'
'Citra,08345678901',
);
}
Isi file:
name,phone
Budi,08123456789
Andi,08234567890
Citra,08345678901
26. Kalau ingin menambahkan user baru
Kemudian:
file.writeAsStringSync(
'\nDoni,08456789012',
mode: FileMode.append,
);
Hasil:
name,phone
Budi,08123456789
Andi,08234567890
Citra,08345678901
Doni,08456789012
27. Kesalahan yang sering dilakukan pemula
Kesalahan 1 — Mengira append otomatis membuat baris baru
Misalnya:
file.writeAsStringSync(
'Andi,08234567890',
mode: FileMode.append,
);
Kalau file sebelumnya:
Budi,08123456789
hasilnya bisa:
Budi,08123456789Andi,08234567890
Bukan:
Budi,08123456789
Andi,08234567890
Solusinya:
'\nAndi,08234567890'
28. Kesalahan 2 — Menggunakan writeAsStringSync() dan tidak sadar data lama hilang
Misalnya:
file.writeAsStringSync('Budi');
kemudian:
file.writeAsStringSync('Andi');
hasilnya:
Andi
Bukan:
Budi
Andi
Karena operasi kedua menimpa isi sebelumnya.
Kalau ingin menambahkan:
file.writeAsStringSync(
'\nAndi',
mode: FileMode.append,
);
29. Kesalahan 3 — Path Windows salah
Misalnya:
File('C:\Users\Budi\Desktop\data.txt');
Backslash dapat menyebabkan masalah karena digunakan sebagai bagian dari escape sequence.
Lebih aman menggunakan raw string:
File(r'C:\Users\Budi\Desktop\data.txt');
atau menggunakan slash:
File('C:/Users/Budi/Desktop/data.txt');
30. writeAsStringSync() vs readAsStringSync()
Ini sangat penting untuk menghubungkan materi sebelumnya dan materi sekarang.
Membaca
String content = file.readAsStringSync();
Arah:
FILE
↓
PROGRAM
Menulis
file.writeAsStringSync('Hello');
Arah:
PROGRAM
↓
FILE
Jadi:
readAsStringSync()
↓
FILE → PROGRAM
writeAsStringSync()
↓
PROGRAM → FILE
Kalau kamu memahami dua arah ini, dasar file handling sudah mulai kuat.
31. writeAsStringSync() punya dua perilaku utama
Mode default / overwrite
file.writeAsStringSync('Hello');
Artinya:
Tulis data dan ganti isi sebelumnya.
Mode append
file.writeAsStringSync(
'\nHello',
mode: FileMode.append,
);
Artinya:
Pertahankan isi lama dan tambahkan data baru di akhir.
32. Analogi paling gampang
Bayangkan file adalah buku catatan.
writeAsStringSync()
Seperti:
“Hapus isi halaman ini dan tulis catatan baru.”
FileMode.append
Seperti:
“Jangan hapus catatan lama. Tambahkan catatan baru di bagian bawah.”
readAsStringSync()
Seperti:
“Baca semua tulisan yang ada di buku.”
\n
Seperti:
“Mulai menulis di baris berikutnya.”
33. Ringkasan method yang sudah kita pelajari
| Kode | Fungsi |
|---|---|
File('data.txt') | Menentukan file |
readAsStringSync() | Membaca isi file |
writeAsStringSync() | Menulis/mengganti isi file |
FileMode.append | Menambahkan data ke akhir file |
file.path | Mendapatkan path file |
file.absolute.path | Mendapatkan absolute path |
file.lastModifiedSync() | Melihat waktu modifikasi terakhir |
Directory.current | Melihat current working directory |
\n | Membuat baris baru |
34. Contoh gabungan TXT
import 'dart:io';
void main() {
File file = File('notes.txt');
// Membuat/menulis isi awal
file.writeAsStringSync('Catatan pertama');
// Menambahkan catatan
file.writeAsStringSync(
'\nCatatan kedua',
mode: FileMode.append,
);
// Membaca kembali isi file
String content = file.readAsStringSync();
print(content);
}
Output:
Catatan pertama
Catatan kedua
Perhatikan alurnya:
write
↓
notes.txt
append
↓
notes.txt
read
↓
content
print
↓
terminal
35. Contoh gabungan CSV
import 'dart:io';
void main() {
File file = File('users.csv');
// Membuat CSV dan header
file.writeAsStringSync(
'name,phone\n'
'Budi,08123456789\n'
'Andi,08234567890',
);
// Menambahkan data baru
file.writeAsStringSync(
'\nCitra,08345678901',
mode: FileMode.append,
);
// Membaca isi CSV
String content = file.readAsStringSync();
print(content);
}
Hasil:
name,phone
Budi,08123456789
Andi,08234567890
Citra,08345678901
36. Inti materi yang harus kamu kuasai
Kalau setelah belajar materi ini kamu hanya mengingat 5 hal, ingat ini:
1. Import
import 'dart:io';
2. Tentukan file
File file = File('data.txt');
3. Tulis/ganti isi
file.writeAsStringSync('Hello');
4. Tambahkan tanpa menghapus
file.writeAsStringSync(
'\nWorld',
mode: FileMode.append,
);
5. CSV menggunakan struktur seperti
name,phone
Budi,08123456789
Andi,08234567890
Dan konsep terpentingnya:
FILE HANDLING
┌───────────────────┐
│ FILE │
└───────────────────┘
↑ ↓
│ │
WRITE READ
│ │
│ │
PROGRAM ←────────┘
Lebih tepatnya:
writeAsStringSync()
PROGRAM ─────────────────→ FILE
readAsStringSync()
PROGRAM ←───────────────── FILE
FileMode.append
PROGRAM ──tambahkan──────→ FILE
tanpa
menghapus isi lama
Jadi materi ini sebenarnya sedang mengajarkan bagaimana Dart berkomunikasi dengan penyimpanan data sederhana. Setelah memahami ini, konsep seperti menyimpan data user, membuat log aplikasi, menyimpan konfigurasi, dan mengolah CSV akan jauh lebih mudah dipahami.