Masukkan Password
49 Chapter 5 Practice Exercise | File Handling in Dart Practice Exercise | Learn Dart | Dart Course
Pada caption ini, Chapter 5 tentang File Handling di Dart sudah selesai, lalu instruktur memberikan latihan/practice exercise untuk menguji semua materi yang sudah dipelajari.
Ada beberapa salah transkripsi dari caption:
- DOT programming language → maksudnya Dart programming language
- hello. EXT / copy. txt → maksudnya file
.txt - fil mode append →
FileMode.append - write as string sync →
writeAsStringSync()
Mari kita bahas satu per satu, termasuk konsep dan cara berpikir untuk menyelesaikannya.
1. Gambaran besar latihan
Ada 7 soal:
| No | Latihan | Materi utama |
|---|---|---|
| 1 | Menulis nama ke hello.txt | writeAsStringSync() |
| 2 | Menambahkan nama teman | FileMode.append |
| 3 | Mendapatkan current working directory | Directory.current |
| 4 | Menyalin hello.txt | copySync() |
| 5 | Membuat 100 file dengan loop | for + File |
| 6 | Menghapus hello_copy.txt | deleteSync() |
| 7 | Menyimpan dan membaca data siswa dari CSV | File + CSV + List/Map |
Jadi sebenarnya latihan ini adalah gabungan dari semua materi File Handling yang sudah dipelajari.
2. Soal nomor 1 — Menambahkan nama ke hello.txt
Instruktur mengatakan:
Write a program to add your name to hello.txt file.
Artinya:
Buat program Dart yang membuat file
hello.txt, kemudian masukkan nama kita ke dalam file tersebut.
Misalnya nama kita:
Budi
Maka isi hello.txt menjadi:
Budi
Cara berpikirnya
Kita membutuhkan:
dart:io- membuat objek
File - menggunakan
writeAsStringSync()
Contoh:
import 'dart:io';
void main() {
File file = File('hello.txt');
file.writeAsStringSync('Budi');
print('Nama berhasil ditulis ke file.');
}
Penjelasan
import 'dart:io';
Kita mengimpor library dart:io.
Library ini menyediakan fitur untuk berinteraksi dengan sistem operasi, termasuk file dan directory.
Kemudian:
File file = File('hello.txt');
Artinya kita membuat objek File yang menunjuk ke:
hello.txt
Perlu diperhatikan:
File() tidak langsung membuat file.
Ia lebih seperti mengatakan:
“Saya ingin bekerja dengan file bernama
hello.txt.”
File benar-benar dibuat ketika kita melakukan operasi seperti:
file.writeAsStringSync(...)
Kemudian:
file.writeAsStringSync('Budi');
Artinya:
Tuliskan teks
"Budi"ke dalam file.
Jika hello.txt belum ada, Dart dapat membuatnya.
Jika file sudah ada dan berisi:
Andi
kemudian kita menjalankan:
file.writeAsStringSync('Budi');
maka isinya menjadi:
Budi
Bukan:
Andi
Budi
Karena writeAsStringSync() secara default menimpa (overwrite) isi file.
3. Soal nomor 2 — Append nama teman
Soal kedua:
Write a program to append your friend’s name to a file that already has your name.
Artinya:
Pada soal pertama kita sudah mempunyai:
hello.txt
isinya:
Budi
Kemudian pada soal kedua kita ingin menambahkan nama teman, misalnya:
Andi
Hasil akhirnya:
Budi
Andi
Nah, kita tidak boleh menggunakan write biasa, karena:
file.writeAsStringSync('Andi');
akan mengganti Budi.
Kita harus menggunakan:
FileMode.append
Contoh:
import 'dart:io';
void main() {
File file = File('hello.txt');
file.writeAsStringSync(
'\nAndi',
mode: FileMode.append,
);
print('Nama teman berhasil ditambahkan.');
}
Apa itu append?
Bayangkan sebuah buku.
Isi buku:
Budi
Kalau kita overwrite, kita menghapus tulisan lama lalu menulis:
Andi
Kalau kita append, kita membuka bagian paling bawah dan menambahkan:
Budi
Andi
Jadi:
writeAsStringSync()
↓
REPLACE
↓
isi lama hilang
FileMode.append
↓
ADD
↓
isi lama tetap ada
Kenapa ada \n?
Kita menggunakan:
'\nAndi'
\n berarti new line/baris baru.
Tanpa \n, hasilnya bisa menjadi:
BudiAndi
Dengan \n:
Budi
Andi
4. Soal nomor 3 — Mendapatkan Current Working Directory
Soal:
Write a Dart program to get the current working directory.
Artinya:
Buat program untuk mengetahui folder tempat program Dart sedang bekerja/berjalan.
Kita sudah mempelajari:
Directory.current
Contoh:
import 'dart:io';
void main() {
print(Directory.current);
}
Misalnya output:
C:\Users\Budi\Documents\dart_project
Artinya program saat ini bekerja dari directory tersebut.
Apa hubungannya dengan File('hello.txt')?
Ini sangat penting.
Ketika kita menulis:
File('hello.txt')
kita menggunakan relative path.
Artinya:
“Cari atau buat
hello.txtberdasarkan current working directory.”
Misalnya:
C:\Users\Budi\Documents\dart_project
adalah current working directory.
Maka:
File('hello.txt')
biasanya mengarah ke:
C:\Users\Budi\Documents\dart_project\hello.txt
Jadi kalau suatu saat kita bingung:
“File saya kok tidak kelihatan?”
Salah satu hal pertama yang perlu diperiksa adalah:
print(Directory.current);
5. Soal nomor 4 — Copy hello.txt
Soal:
Write a Dart program to copy the hello.txt file to hello_copy.txt file.
Artinya:
Kita mempunyai:
hello.txt
dan ingin membuat salinannya:
hello_copy.txt
Misalnya:
hello.txt
Budi
Andi
Setelah dicopy:
hello.txt
↓
COPY
↓
hello_copy.txt
Keduanya memiliki isi yang sama.
Bagaimana melakukan copy?
Kita bisa menggunakan:
copySync()
Contoh:
import 'dart:io';
void main() {
File file = File('hello.txt');
file.copySync('hello_copy.txt');
print('File berhasil dicopy.');
}
Perhatikan:
file.copySync('hello_copy.txt');
Artinya:
Salin file ini ke file bernama
hello_copy.txt.
Alurnya
hello.txt
↓
File('hello.txt')
↓
copySync()
↓
hello_copy.txt
Setelah program dijalankan:
hello.txt
hello_copy.txt
Perbedaan copy dan rename
Ini juga penting.
Copy
file.copySync('hello_copy.txt');
Hasil:
hello.txt
hello_copy.txt
File lama tetap ada.
Rename
file.renameSync('hello_new.txt');
Hasilnya:
hello_new.txt
File dengan nama lama sudah tidak ada.
Jadi:
COPY
→ membuat salinan
RENAME
→ mengganti nama/memindahkan file
6. Soal nomor 5 — Membuat 100 file menggunakan Loop
Ini salah satu soal yang sangat bagus untuk latihan.
Instruktur mengatakan:
Write a program to create 100 files using Loop.
Artinya:
Buat 100 file menggunakan perulangan.
Kalau dilakukan manual:
File('file1.txt');
File('file2.txt');
File('file3.txt');
...
sangat tidak efisien.
Kita menggunakan for.
Contoh:
import 'dart:io';
void main() {
for (int i = 1; i <= 100; i++) {
File file = File('file$i.txt');
file.createSync();
}
print('100 file berhasil dibuat.');
}
Mari kita bedah
Bagian:
for (int i = 1; i <= 100; i++)
berarti:
i = 1
buat file
i = 2
buat file
i = 3
buat file
...
i = 100
buat file
Kemudian:
File file = File('file$i.txt');
Ini menarik.
Dart menggunakan string interpolation:
$file
untuk memasukkan nilai variable ke dalam String.
Misalnya:
i = 1
maka:
'file$i.txt'
menjadi:
file1.txt
Ketika:
i = 2
menjadi:
file2.txt
Dan seterusnya.
Hasilnya:
file1.txt
file2.txt
file3.txt
file4.txt
...
file100.txt
7. Soal nomor 6 — Menghapus hello_copy.txt
Soal:
Write a program to delete the file hello_copy.txt.
Artinya kita diminta menghapus:
hello_copy.txt
Kita sudah mempelajari:
deleteSync()
Contoh sederhana:
import 'dart:io';
void main() {
File file = File('hello_copy.txt');
file.deleteSync();
print('File berhasil dihapus.');
}
Tapi ada masalah
Bagaimana kalau:
hello_copy.txt
tidak ada?
Program dapat menghasilkan error/exception.
Lebih aman menggunakan:
existsSync()
Contoh:
import 'dart:io';
void main() {
File file = File('hello_copy.txt');
if (file.existsSync()) {
file.deleteSync();
print('File berhasil dihapus.');
} else {
print('File tidak ditemukan.');
}
}
Alurnya:
Apakah file ada?
↓
YES
↓
deleteSync()
↓
File terhapus
NO
↓
"File tidak ditemukan"
Ini adalah pola yang bagus untuk diingat:
if (file.existsSync()) {
file.deleteSync();
}
8. Soal nomor 7 — Data siswa dalam CSV
Ini adalah soal yang paling penting dan sedikit lebih kompleks.
Instruktur meminta:
Write a program to store name, age and address of students in a CSV file and read it.
Artinya:
Buat program yang menyimpan nama, umur, dan alamat siswa ke dalam file CSV, kemudian membaca file tersebut.
Apa itu CSV?
CSV adalah singkatan dari:
Comma-Separated Values
atau:
data yang dipisahkan menggunakan koma.
Contohnya:
name,age,address
Budi,20,Madiun
Andi,21,Surabaya
Citra,19,Malang
Perhatikan strukturnya.
Baris pertama:
name,age,address
adalah header.
Kemudian:
Budi,20,Madiun
adalah data siswa pertama.
Andi,21,Surabaya
adalah data siswa kedua.
9. Membuat file CSV
Contoh sederhana:
import 'dart:io';
void main() {
File file = File('students.csv');
file.writeAsStringSync(
'name,age,address\n'
'Budi,20,Madiun\n'
'Andi,21,Surabaya\n'
'Citra,19,Malang',
);
print('Data berhasil disimpan.');
}
Setelah dijalankan, file:
students.csv
berisi:
name,age,address
Budi,20,Madiun
Andi,21,Surabaya
Citra,19,Malang
10. Kenapa menggunakan \n?
Perhatikan:
'name,age,address\n'
'Budi,20,Madiun\n'
'Andi,21,Surabaya\n'
'Citra,19,Malang'
\n berarti pindah ke baris berikutnya.
Jadi:
\n
sama dengan:
Enter / New Line
Hasilnya:
name,age,address
Budi,20,Madiun
Andi,21,Surabaya
Citra,19,Malang
11. Membaca file CSV
Setelah file dibuat, kita bisa membacanya menggunakan:
readAsStringSync()
Contoh:
import 'dart:io';
void main() {
File file = File('students.csv');
String data = file.readAsStringSync();
print(data);
}
Output:
name,age,address
Budi,20,Madiun
Andi,21,Surabaya
Citra,19,Malang
Perhatikan bahwa Dart tidak otomatis memahami CSV sebagai tabel hanya karena ekstensi filenya .csv.
readAsStringSync() hanya membaca file sebagai String biasa.
12. Kalau ingin memproses CSV
Misalnya kita ingin mengambil setiap baris.
Kita bisa menggunakan:
List<String> lines = data.split('\n');
Contoh:
import 'dart:io';
void main() {
File file = File('students.csv');
String data = file.readAsStringSync();
List<String> lines = data.split('\n');
for (String line in lines) {
print(line);
}
}
Hasilnya:
name,age,address
Budi,20,Madiun
Andi,21,Surabaya
Citra,19,Malang
13. Memisahkan data berdasarkan koma
Kita bisa menggunakan:
split(',')
Misalnya:
String student = 'Budi,20,Madiun';
List<String> data = student.split(',');
print(data);
Hasilnya kira-kira:
[Budi, 20, Madiun]
Kemudian:
print(data[0]);
hasil:
Budi
print(data[1]);
hasil:
20
print(data[2]);
hasil:
Madiun
Jadi:
"Budi,20,Madiun"
↓
split(',')
↓
[Budi, 20, Madiun]
14. Contoh lengkap membaca CSV
Untuk latihan dasar, kita bisa membuat seperti ini:
import 'dart:io';
void main() {
File file = File('students.csv');
String data = file.readAsStringSync();
List<String> lines = data.split('\n');
for (String line in lines) {
List<String> student = line.split(',');
print('Name: ${student[0]}');
print('Age: ${student[1]}');
print('Address: ${student[2]}');
print('----------------');
}
}
Namun ada satu hal yang perlu diperhatikan: baris pertama adalah header:
name,age,address
Jadi sebenarnya kita tidak ingin memperlakukannya sebagai data siswa.
Untuk latihan yang lebih rapi, kita bisa mulai dari index 1:
import 'dart:io';
void main() {
File file = File('students.csv');
String data = file.readAsStringSync();
List<String> lines = data.split('\n');
for (int i = 1; i < lines.length; i++) {
List<String> student = lines[i].split(',');
print('Name: ${student[0]}');
print('Age: ${student[1]}');
print('Address: ${student[2]}');
print('----------------');
}
}
15. Bagaimana semua soal ini saling berhubungan?
Ini sebenarnya inti dari latihan Chapter 5.
Kita sudah belajar:
Membuat/menentukan file
File('hello.txt');
Menulis
writeAsStringSync()
Menambahkan
FileMode.append
Membaca
readAsStringSync()
Mengecek keberadaan
existsSync()
Menghapus
deleteSync()
Copy
copySync()
Rename
renameSync()
Directory
Directory.current
16. Peta konsep Chapter 5
Supaya lebih mudah diingat:
FILE HANDLING
│
┌────────────┼─────────────┐
│ │ │
CREATE READ WRITE
│ │ │
createSync() readAsStringSync() │
│
writeAsStringSync()
│
┌───────┴───────┐
│ │
overwrite append
│
FileMode.append
┌───────────────┐
│ │
DELETE COPY
│ │
deleteSync() copySync()
┌───────────────┐
│
DIRECTORY
│
Directory.current
17. Hal yang paling penting untuk dipahami
Jangan hanya menghafalkan nama method. Pahami arah operasinya.
Program → File
Ketika kita menyimpan data:
writeAsStringSync()
arahnya:
PROGRAM
↓
FILE
File → Program
Ketika kita membaca:
readAsStringSync()
arahnya:
FILE
↓
PROGRAM
File → File
Ketika melakukan copy:
copySync()
arahnya:
hello.txt
↓
copy
↓
hello_copy.txt
File → tidak ada
Ketika menghapus:
deleteSync()
arahnya:
hello_copy.txt
↓
DELETE
↓
hilang
18. Urutan pengerjaan latihan yang saya sarankan
Kalau kamu mengerjakan latihan ini sendiri, jangan langsung melihat jawaban. Coba gunakan pola berikut.
Soal 1
Pikirkan:
Saya perlu file apa?
Jawab:
hello.txt
Saya perlu menulis atau membaca?
menulis
Method?
writeAsStringSync()
Soal 2
Saya ingin mempertahankan data lama?
Ya.
Berarti overwrite atau append?
append
Method?
FileMode.append
Soal 3
Saya ingin mengetahui folder aktif.
Gunakan:
Directory.current
Soal 4
Saya ingin membuat salinan file.
Gunakan:
copySync()
Soal 5
Saya harus membuat 100 file.
Berarti ada pekerjaan berulang.
Gunakan:
for
Soal 6
Saya ingin menghapus file.
Gunakan:
deleteSync()
Sebaiknya cek dulu:
existsSync()
Soal 7
Saya menyimpan data terstruktur.
Gunakan:
CSV
Kemudian:
writeAsStringSync()
↓
students.csv
↓
readAsStringSync()
↓
String
↓
split('\n')
↓
masing-masing baris
↓
split(',')
↓
nama, umur, alamat
19. Ringkasan semua soal
| Soal | Tujuan | Yang digunakan |
|---|---|---|
| 1 | Menulis nama | writeAsStringSync() |
| 2 | Menambah nama teman | FileMode.append |
| 3 | Melihat folder aktif | Directory.current |
| 4 | Menyalin file | copySync() |
| 5 | Membuat 100 file | for + File |
| 6 | Menghapus file | deleteSync() |
| 7 | Menyimpan & membaca siswa | CSV + writeAsStringSync() + readAsStringSync() |
Yang wajib kamu ingat dari Chapter 5:
File()
↓
menentukan file yang ingin kita kerjakan
createSync()
↓
membuat file
writeAsStringSync()
↓
menulis / overwrite
FileMode.append
↓
menambahkan tanpa menghapus isi lama
readAsStringSync()
↓
membaca isi file
existsSync()
↓
mengecek apakah file ada
copySync()
↓
membuat salinan
deleteSync()
↓
menghapus
Directory.current
↓
mengetahui current working directory
Inti dari latihan ini bukan sekadar menghafal method, tetapi belajar memilih operasi yang tepat berdasarkan kebutuhan: buat → tulis → baca → tambah → copy → cek → hapus.