Membuka Berkas dengan io.open
Buka berkas dalam mode baca, tulis, dan tambah menggunakan io.open.
Membuka Berkas dengan io.open adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Sintaks io.open
io.open(filename, mode) membuka file dan mengembalikan pegangan file, atau nil beserta pesan error jika gagal. String mode: "r" baca (bawaan), "w" tulis (memotong isi), "a" tambah, "r+" baca/tulis, "b" akhiran untuk biner.
local f, err = io.open("test.txt", "w")
if not f then
print("Error:", err)
return
end
f:write("Hello, Lua!\n")
f:close()
print("Written successfully")Mode Baca
Buka dalam mode "r" untuk membaca file yang sudah ada. Selalu periksa nil—jika file tidak ada, io.open mengembalikan nil dan pesan error. Jangan pernah menganggap file tersebut tersedia.
local f, err = io.open("test.txt", "r")
if not f then
print("Cannot open:", err)
return
end
local content = f:read("*a") -- read all
f:close()
print(content)Mode Tulis dan Tambah
"w" membuat atau memotong isi file. "a" membuat file jika diperlukan dan selalu menambahkan isi di akhir. Gunakan mode tambah untuk file log agar konten sebelumnya tidak hilang.
-- Write (creates/truncates)
local f = io.open("log.txt", "w")
f:write("Session started\n")
f:close()
-- Append (adds to end)
local g = io.open("log.txt", "a")
g:write("Event: login\n")
g:write("Event: action\n")
g:close()Mode Biner
Tambahkan "b" ke mode apa pun untuk membaca/menulis biner. Di Unix, mode teks dan biner identik. Di Windows, mode teks menerjemahkan \n menjadi \r\n; mode biner menonaktifkan perilaku ini. Selalu gunakan mode biner untuk file nonteks.
-- Binary read
local f = io.open("image.png", "rb")
if f then
local header = f:read(8) -- read 8 bytes
f:close()
-- Check PNG magic number: \137PNG\r\n\26\n
print("Read", #header, "bytes")
end
-- Binary write
local g = io.open("out.bin", "wb")
if g then
g:write(string.char(0x89, 0x50, 0x4E, 0x47))
g:close()
endMetode Pegangan File
Pegangan file (yang dikembalikan oleh io.open) memiliki metode: f:read(...), f:write(...), f:lines(), f:seek(whence, offset), f:flush(), f:close(). Panggil metode tersebut dengan sintaks titik dua pada pegangan.
local f = io.open("data.txt", "w")
f:write("line 1\n")
f:write("line 2\n")
f:write("line 3\n")
f:flush() -- force write to disk
f:close()
local g = io.open("data.txt", "r")
for line in g:lines() do
print(line)
end
g:close()io.input dan io.output
io.input(f) menetapkan file input bawaan; io.output(f) menetapkan output bawaan. io.read() membaca dari input saat ini; io.write() menulis ke output saat ini. Input bawaan adalah stdin; output bawaan adalah stdout.
-- Read from stdin (default input)
local line = io.read() -- reads one line
print("You entered:", line)
-- Set default output to a file
io.output("out.txt")
io.write("This goes to out.txt\n")
io.output(io.stdout) -- restore stdoutMemeriksa Keberadaan File
Lua tidak memiliki file.exists(), tetapi Anda dapat menggunakan io.open dalam mode baca—jika gagal, file tersebut tidak ada (atau tidak dapat diakses). Sebagai alternatif, pada sistem POSIX gunakan os.execute atau pustaka lfs.
local function fileExists(path)
local f = io.open(path, "r")
if f then f:close(); return true end
return false
end
print(fileExists("test.txt")) -- true/false
print(fileExists("noexist.txt")) -- falseMembaca dengan Mode
f:read() menerima string format: "l" atau "*l" membaca satu baris (menghapus karakter baris baru); "L" mempertahankan karakter baris baru; "n" membaca angka; "a" atau "*a" membaca hingga EOF; angka akan membaca byte sebanyak angka tersebut.
local f = io.open("data.txt", "r")
if f then
local line1 = f:read("l") -- first line, no newline
local num = f:read("n") -- next number in file
local rest = f:read("a") -- rest of file
f:close()
print(type(line1), type(num))
endFile Sementara
io.tmpfile() membuka file sementara dalam mode baca/tulis. File tersebut otomatis dihapus saat program berakhir atau handle-nya dikumpulkan oleh pengumpul sampah. Gunakan cara ini untuk pemrosesan perantara tanpa perlu mengelola nama file.
local tmp = io.tmpfile()
tmp:write("temporary data\n")
tmp:write("more data\n")
-- Seek back to start and read
tmp:seek("set", 0)
local content = tmp:read("a")
print(content)
-- File auto-deleted when tmp is collectedMelakukan Iterasi Baris dengan lines()
f:lines() mengembalikan iterator yang membaca satu baris setiap kali. File otomatis ditutup saat iterator kehabisan data. Cara ini hemat memori untuk file besar—seluruh file tidak pernah dimuat sekaligus.
local function countLines(path)
local count = 0
local f, err = io.open(path, "r")
if not f then return nil, err end
for _ in f:lines() do
count = count + 1
end
-- f is closed automatically by lines()
return count
end
local n, err = countLines("data.txt")
print("Lines:", n)Pemeriksaan Singkat
Apa yang dilakukan io.open("file.txt", "a") jika file tersebut tidak ada?
Ringkasan: io.open
Ringkasan:
io.open(path, mode)mengembalikan handle atau nil+error- Mode:
r w a r+ b - Selalu periksa nil sebelum menggunakan handle
- Panggil
f:close()setelah selesai f:lines()untuk iterasi baris yang hemat memoriio.tmpfile()untuk file sementara yang dihapus otomatis
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuka Berkas dengan io.open” gratis?
Ya — teks lengkap “Membuka Berkas dengan io.open” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membuka Berkas dengan io.open”?
Buka berkas dalam mode baca, tulis, dan tambah menggunakan io.open. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Membuka Berkas dengan io.open” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membuka Berkas dengan io.open
- Membaca Isi Berkas
- Menulis dan Menambahkan Isi ke Berkas
- Menutup Berkas dan Menangani Galat