0Pricing
Lua Academy · Aula

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()
end

Mé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 stdout

Verificando 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"))  -- false

Lendo 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))
end

Arquivos 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 collected

Iterando 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ória
  • io.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

  1. Abrindo arquivos com io.open
  2. Lendo o conteúdo de arquivos
  3. Escrevendo e acrescentando em arquivos
  4. Fechando arquivos e tratando erros
← Voltar para Lua Academy