Masukkan Password
48 5.3 How to Delete Files in Dart Programming Language | Dart File Handling | Learn Dart | Dart Course
Materi ini melanjutkan File Handling di Dart. Kalau sebelumnya kita belajar:
readAsStringSync()β membaca filewriteAsStringSync()β menulis/mengubah fileFileMode.appendβ menambahkan isi tanpa menghapus data lama
Sekarang kita belajar:
Bagaimana menghapus file menggunakan Dart.
Caption-nya juga ada beberapa salah transkripsi, misalnya βDOTβ β Dart, βdoio/iioβ β dart:io, dan βdelete syncβ β deleteSync().
1. Gambaran besar materi
Kita akan belajar 3 cara penting:
- Menghapus file secara langsung dengan
deleteSync() - Mengecek apakah file ada sebelum menghapusnya dengan
existsSync() - Menangani error menggunakan
try-catch
Gambaran sederhananya:
FILE
β
βΌ
Apakah ada?
/ \
YA TIDAK
β β
βΌ βΌ
deleteSync() tampilkan pesan
β
βΌ
File terhapus
2. Import dart:io
Seperti materi sebelumnya, kita membutuhkan:
import 'dart:io';
Contoh:
import 'dart:io';
void main() {
// kode file handling
}
Kenapa?
Karena class File, Directory, dan berbagai operasi file tersedia melalui dart:io.
3. Membuat objek File
Misalnya kita mempunyai file:
my_file.txt
di folder Downloads.
Kita bisa menentukan file tersebut:
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
Sekarang variable:
file
merepresentasikan file tersebut.
Penting: baris ini belum menghapus file.
Kita baru memberitahu Dart:
“File yang akan saya operasikan adalah
my_file.txt.”
4. Menghapus file dengan deleteSync()
Untuk menghapus file:
file.deleteSync();
Contoh lengkap:
import 'dart:io';
void main() {
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
file.deleteSync();
}
Ketika program dijalankan, Dart akan mencoba menghapus:
my_file.txt
5. Apa yang sebenarnya terjadi?
Misalnya sebelum program dijalankan:
Downloads
β
βββ photo.jpg
βββ my_file.txt
βββ document.pdf
Kemudian:
file.deleteSync();
Dart menghapus my_file.txt.
Hasil:
Downloads
β
βββ photo.jpg
βββ document.pdf
Jadi alurnya:
File object
β
deleteSync()
β
Sistem operasi
β
File dihapus
6. Apa arti Sync?
Sama seperti pembahasan sebelumnya.
deleteSync()
adalah operasi synchronous.
Untuk pemahaman pemula:
Dart menjalankan proses penghapusan dan menunggu operasi tersebut selesai sebelum melanjutkan ke baris berikutnya.
Misalnya:
file.deleteSync();
print('Selesai');
Urutannya:
1. Hapus file
β
2. Tunggu proses selesai
β
3. print("Selesai")
Nanti ada versi asynchronous:
await file.delete();
tetapi untuk materi sekarang kita fokus ke deleteSync().
7. Masalah: file sudah tidak ada
Ini bagian yang sangat penting.
Misalnya file:
my_file.txt
sudah kita hapus.
Kemudian kita menjalankan lagi:
file.deleteSync();
Apa yang terjadi?
Dart akan mencoba menghapus file:
my_file.txt
tetapi file tersebut sudah tidak ada.
Akibatnya terjadi exception.
Kurang lebih:
PathNotFoundException
Artinya:
Dart tidak menemukan file pada path yang diberikan.
8. Kenapa exception terjadi?
Misalnya kita mempunyai:
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
Kemudian:
file.deleteSync();
Pertama kali:
my_file.txt ada
β
deleteSync()
β
berhasil
β
file hilang
Kalau dijalankan lagi:
my_file.txt tidak ada
β
deleteSync()
β
Dart mencoba mencari file
β
tidak ditemukan
β
Exception
Jadi bukan berarti deleteSync() rusak.
Masalahnya adalah:
Kita meminta Dart menghapus sesuatu yang sudah tidak ada.
9. Solusi pertama: existsSync()
Daripada langsung:
file.deleteSync();
kita bisa mengecek terlebih dahulu:
file.existsSync()
Method ini digunakan untuk mengetahui:
Apakah file tersebut ada?
Hasilnya berupa:
bool
yaitu:
true
atau:
false
10. Contoh existsSync()
import 'dart:io';
void main() {
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
print(file.existsSync());
}
Kalau file ada:
true
Kalau file tidak ada:
false
11. Menggunakan if
Sekarang kita bisa membuat program yang lebih aman:
import 'dart:io';
void main() {
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
if (file.existsSync()) {
file.deleteSync();
print('File berhasil dihapus');
} else {
print('File tidak ada');
}
}
Mari kita baca seperti bahasa manusia:
Kalau file ada, hapus file tersebut. Kalau tidak ada, tampilkan pesan bahwa file tidak ada.
12. Bedah kode satu per satu
Baris ini:
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
Menentukan file yang ingin kita hapus.
Kemudian:
if (file.existsSync()) {
Kita mengecek apakah file tersebut ada.
Kalau:
true
masuk ke blok:
{
file.deleteSync();
}
Kalau:
false
masuk ke:
else
Bagian ini:
file.deleteSync();
menghapus file.
Bagian ini:
print('File berhasil dihapus');
memberikan informasi kepada user.
Kalau file tidak ada:
else {
print('File tidak ada');
}
Program tidak mencoba menghapus sesuatu yang memang tidak ada.
13. Flow programnya
Program tadi bisa dibayangkan seperti ini:
Mulai
β
βΌ
Tentukan file
β
βΌ
existsSync() ?
/ \
true false
β β
βΌ βΌ
deleteSync() "File tidak ada"
β
βΌ
"File berhasil dihapus"
β
βΌ
Selesai
Ini adalah pola pemrograman yang sangat umum:
Check β Action
Artinya:
Cek kondisi
β
Kalau memenuhi
β
Lakukan tindakan
14. Kenapa existsSync() berguna?
Bayangkan kamu ingin menghapus sebuah dokumen.
Daripada langsung berkata:
“Hapus dokumen itu!”
lebih aman:
“Cek dulu apakah dokumennya ada. Kalau ada, baru hapus.”
Dalam kode:
if (file.existsSync()) {
file.deleteSync();
}
Jadi:
existsSync()
β
"Apakah ada?"
β
deleteSync()
β
"Hapus."
15. Solusi kedua: try-catch
Selain mengecek menggunakan:
existsSync()
kita juga bisa menangani error menggunakan:
try-catch
Misalnya:
import 'dart:io';
void main() {
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
try {
file.deleteSync();
print('File berhasil dihapus');
} catch (e) {
print('Terjadi error: $e');
}
}
16. Apa itu try-catch?
try-catch digunakan untuk:
Menangani exception/error yang terjadi saat program berjalan.
Strukturnya:
try {
// kode yang mungkin menghasilkan error
} catch (e) {
// apa yang dilakukan kalau error
}
Bayangkan:
TRY
β
"Coba lakukan ini"
β
berhasil?
βββ YA β lanjut
β
βββ TIDAK β CATCH
β
tangani error
17. Contoh kasus file
try {
file.deleteSync();
} catch (e) {
print('Tidak bisa menghapus file');
}
Kalau file ada:
deleteSync()
β
berhasil
β
lanjut
Kalau file tidak ada:
deleteSync()
β
exception
β
catch
β
print(...)
Program tidak langsung berhenti karena exception tersebut ditangani oleh catch.
18. Apa itu e?
Pada:
catch (e)
e adalah variable yang berisi informasi mengenai exception/error.
Misalnya:
catch (e) {
print(e);
}
bisa menampilkan informasi error seperti:
PathNotFoundException: Cannot delete file...
Kita juga bisa membuat pesan sendiri:
catch (e) {
print('Tidak dapat menghapus file');
}
Jadi user tidak harus melihat pesan error teknis yang panjang.
19. existsSync() vs try-catch
Keduanya berbeda.
existsSync()
Digunakan untuk mengecek kondisi.
if (file.existsSync()) {
file.deleteSync();
}
Pertanyaannya:
“Apakah file ini ada?”
try-catch
Digunakan untuk menangani exception.
try {
file.deleteSync();
} catch (e) {
print(e);
}
Pertanyaannya:
“Kalau operasi ini menghasilkan error, bagaimana saya menanganinya?”
20. Bisa menggunakan keduanya
Untuk program yang lebih aman, kita bisa menggunakan:
import 'dart:io';
void main() {
File file = File(
r'C:\Users\Budi\Downloads\my_file.txt',
);
if (file.existsSync()) {
try {
file.deleteSync();
print('File berhasil dihapus');
} catch (e) {
print('Gagal menghapus file: $e');
}
} else {
print('File tidak ditemukan');
}
}
Namun, untuk contoh sederhana, sering kali salah satu pendekatan sudah cukup.
21. Mengapa try-catch masih berguna walaupun sudah existsSync()?
Karena kondisi file bisa berubah.
Misalnya:
Waktu 1:
existsSync() β true
Waktu 2:
file dihapus oleh program/user lain
Waktu 3:
deleteSync() β error
Jadi:
existsSync()
bukan jaminan mutlak bahwa operasi berikutnya pasti berhasil.
Bisa saja terjadi error lain, misalnya masalah permission atau file sedang digunakan oleh proses lain.
Di sinilah try-catch berguna sebagai lapisan pengamanan tambahan.
22. deleteSync() tidak hanya untuk .txt
Kita tidak terbatas pada:
.txt
Misalnya:
File('photo.jpg').deleteSync();
atau:
File('data.csv').deleteSync();
atau:
File('document.pdf').deleteSync();
Selama path tersebut menunjuk ke sebuah file yang dapat dihapus dan program memiliki izin yang sesuai.
Jadi File tidak peduli apakah file itu:
.txt
.csv
.jpg
.png
.pdf
.json
Operasi delete bekerja pada file tersebut.
23. Path juga bisa relative
Kita tidak harus selalu menggunakan absolute path.
Misalnya:
File('data.txt').deleteSync();
Artinya:
Hapus
data.txtdari current working directory.
Contoh:
import 'dart:io';
void main() {
File file = File('data.txt');
if (file.existsSync()) {
file.deleteSync();
print('File berhasil dihapus');
}
}
Ini jauh lebih sederhana untuk latihan.
24. Hati-hati: menghapus file adalah operasi permanen
Ini hal yang perlu kamu pahami sebagai programmer.
Kalau:
file.deleteSync();
berhasil, file tersebut dihapus dari filesystem.
Jadi jangan sembarangan melakukan:
file.deleteSync();
terhadap path yang belum kamu pastikan benar.
Misalnya program mendapatkan path dari input user, sebaiknya ada validasi dan pembatasan agar tidak menghapus file yang tidak seharusnya.
25. Materi terakhir: rename()
Di akhir caption, instruktur juga menyebut bahwa File mempunyai banyak fungsi lain.
Salah satunya:
rename
Misalnya kita punya:
old.txt
dan ingin mengubah namanya menjadi:
new.txt
Secara asynchronous bisa menggunakan:
await file.rename('new.txt');
Sedangkan versi synchronous:
file.renameSync('new.txt');
Contoh:
import 'dart:io';
void main() {
File file = File('old.txt');
file.renameSync('new.txt');
}
Setelah program dijalankan:
old.txt
menjadi:
new.txt
26. Rename sebenarnya bisa mengubah path juga
Misalnya:
file.renameSync('backup/data.txt');
Artinya kita tidak hanya mengubah nama, tetapi juga dapat memindahkan file ke lokasi/path baru, selama operasi tersebut valid.
Misalnya secara konsep:
sebelum:
project/
βββ data.txt
setelah:
project/
βββ backup/
βββ data.txt
Jadi rename bisa digunakan untuk perubahan nama/lokasi file.
27. Hubungan materi Chapter 5 sejauh ini
Sekarang kita sudah punya 3 operasi utama.
Membaca
file.readAsStringSync();
Arah:
FILE
β
PROGRAM
Menulis
file.writeAsStringSync('Hello');
Arah:
PROGRAM
β
FILE
Menghapus
file.deleteSync();
Arah:
PROGRAM
β
FILE dihapus
28. Tabel rangkuman
| Method | Fungsi |
|---|---|
File('data.txt') | Menentukan file |
readAsStringSync() | Membaca isi file |
writeAsStringSync() | Menulis/mengganti isi |
FileMode.append | Menambahkan isi di akhir |
existsSync() | Mengecek apakah file ada |
deleteSync() | Menghapus file |
renameSync() | Mengubah nama/memindahkan file |
lastModifiedSync() | Melihat waktu modifikasi terakhir |
file.path | Melihat path file |
file.absolute.path | Melihat absolute path |
29. Contoh program yang bagus untuk latihan
Coba pahami program berikut:
import 'dart:io';
void main() {
File file = File('test.txt');
if (!file.existsSync()) {
print('File tidak ditemukan');
return;
}
print('File ditemukan');
print('Isi file:');
print(file.readAsStringSync());
print('\nMenghapus file...');
try {
file.deleteSync();
print('File berhasil dihapus');
} catch (e) {
print('Gagal menghapus file');
print('Error: $e');
}
}
Perhatikan kita menggabungkan materi sebelumnya.
Urutannya:
test.txt
β
βΌ
existsSync()
β
ββββββββ΄βββββββ
β β
false true
β β
βΌ βΌ
"tidak ditemukan" readAsStringSync()
β
βΌ
tampilkan
β
βΌ
deleteSync()
β
βββββββ΄ββββββ
β β
berhasil error
β β
βΌ βΌ
berhasil catch
Ini sudah mulai menyerupai pola program nyata.
30. Inti yang harus benar-benar kamu pahami
Kalau disederhanakan, materi ini hanya punya 3 konsep utama:
β deleteSync()
Untuk menghapus:
file.deleteSync();
β‘ existsSync()
Untuk mengecek:
if (file.existsSync()) {
// file ada
}
β’ try-catch
Untuk menangani error:
try {
file.deleteSync();
} catch (e) {
print('Terjadi error');
}
π§ Cara mengingatnya
Bayangkan kamu mau membuang sebuah barang:
existsSync()
"Barangnya ada?"
β
YA
β
deleteSync()
"Buang barang"
β
selesai
Kalau saat proses terjadi masalah:
try
β
coba buang
β
berhasil? ββ YA β selesai
β
TIDAK
β
catch
β
tangani error
Jadi existsSync() adalah pengecekan, sedangkan deleteSync() adalah tindakan, dan try-catch adalah mekanisme pengamanan ketika tindakan tersebut menghasilkan exception.
Itulah inti dari tutorial ini.