Abrindo arquivos com io.open
Abra arquivos nos modos de leitura, escrita e acréscimo usando io.open.
Abrindo arquivos com io.open é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Sintaxe de io.open
io.open(filename, mode) abre um arquivo e retorna um identificador de arquivo, ou nil e uma mensagem de erro em caso de falha. Modos: "r" leitura (padrão), "w" escrita (trunca), "a" anexação, "r+" leitura/escrita, "b" sufixo para binário.
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")Modo de Leitura
Abra no modo "r" para ler um arquivo existente. Sempre verifique se o valor é nil — se o arquivo não existir, io.open retornará nil e uma mensagem de erro. Nunca presuma que o arquivo está presente.
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)Modos de Escrita e Anexação
"w" cria ou trunca o arquivo. "a" cria o arquivo, se necessário, e sempre adiciona conteúdo ao final. Use o modo de anexação para arquivos de log quando não quiser perder o conteúdo anterior.
-- 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()Modo Binário
Adicione "b" a qualquer modo para leitura ou escrita binária. No Unix, os modos de texto e binário são idênticos. No Windows, o modo de texto converte \n em \r\n; o modo binário desativa essa conversão. Sempre use o modo binário para arquivos que não sejam de texto.
-- 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()
endMétodos do Identificador de Arquivo
Um identificador de arquivo (retornado por io.open) tem os métodos: f:read(...), f:write(...), f:lines(), f:seek(whence, offset), f:flush(), f:close(). Chame-os usando a sintaxe com dois-pontos no identificador.
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 e io.output
io.input(f) define o arquivo de entrada padrão; io.output(f) define a saída padrão. io.read() lê da entrada atual; io.write() escreve na saída atual. A entrada padrão é stdin; a saída padrão é 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 stdoutVerificando a Existência de Arquivos
Lua não tem file.exists(), mas pode usar io.open no modo de leitura — se a operação falhar, o arquivo não existe (ou está inacessível). Como alternativa, em sistemas POSIX use os.execute ou a biblioteca 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")) -- falseLendo com Modos
f:read() aceita strings de formato: "l" ou "*l" lê uma linha (remove a quebra de linha); "L" mantém a quebra de linha; "n" lê um número; "a" ou "*a" lê até EOF; um número lê essa quantidade de bytes.
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))
endArquivos Temporários
io.tmpfile() abre um arquivo temporário no modo de leitura e escrita. O arquivo é excluído automaticamente quando o programa termina ou quando o identificador é coletado pelo coletor de lixo. Use-o para processamento intermediário sem precisar gerenciar nomes de arquivos.
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 collectedIterando sobre Linhas com lines()
f:lines() retorna um iterador que lê uma linha por vez. Ele fecha o arquivo automaticamente quando o iterador se esgota. Isso é eficiente em termos de memória para arquivos grandes — o arquivo inteiro nunca é carregado de uma só vez.
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)Verificação Rápida
O que io.open("file.txt", "a") faz se o arquivo não existir?
Recapitulação: io.open
Resumo:
io.open(path, mode)retorna um identificador ou nil+erro- Modos:
r w a r+ b - Sempre verifique se o valor é nil antes de usar o identificador
- Chame
f:close()quando terminar f:lines()para iterar sobre linhas com uso eficiente de memóriaio.tmpfile()para arquivos temporários excluídos automaticamente
Perguntas Frequentes
A aula “Abrindo arquivos com io.open” é grátis?
Sim — o texto completo de “Abrindo arquivos com io.open” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Abrindo arquivos com io.open”?
Abra arquivos nos modos de leitura, escrita e acréscimo usando io.open. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Abrindo arquivos com io.open”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Abrindo arquivos com io.open
- Lendo o conteúdo de arquivos
- Escrevendo e acrescentando em arquivos
- Fechando arquivos e tratando erros