{"id":51144,"date":"2022-07-12T04:20:37","date_gmt":"2022-07-12T07:20:37","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=51144&#038;post_type=knowledgebase&#038;preview_id=51144"},"modified":"2025-10-01T17:03:54","modified_gmt":"2025-10-01T20:03:54","slug":"nodejs-fs","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/","title":{"rendered":"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)"},"content":{"rendered":"<p>O JavaScript tem sido uma das linguagens de script mais populares, mas por um longo per\u00edodo, n\u00e3o foi uma grande escolha para o desenvolvimento de aplicativos backend do lado do servidor. Ent\u00e3o veio o Node.js, usado para criar aplicativos leves, orientados a eventos, constru\u00eddos usando a linguagem de programa\u00e7\u00e3o JavaScript.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-node-js\/\" rel=\"noopener\">Node.js \u00e9 um JavaScript de c\u00f3digo aberto runtime<\/a> que est\u00e1 dispon\u00edvel para download e instala\u00e7\u00e3o gratuita em qualquer um dos principais sistemas operacionais (Windows, Mac, Linux). Ele tem se tornado cada vez mais <a href=\"https:\/\/kinsta.com\/pt\/blog\/aplicativos-node-js\/\" rel=\"noopener\">popular entre os criadores de aplicativos<\/a> nos \u00faltimos anos, e tem fornecido <a href=\"https:\/\/kinsta.com\/pt\/blog\/salario-desenvolvedor-node-js\/\" rel=\"noopener\">novas oportunidades de emprego<\/a> para desenvolvedores de JavaScript que buscam uma especialidade.<\/p>\n\n<p>Neste artigo, vamos aprender sobre como gerenciar o sistema de arquivos usando o Node.js. \u00c9 f\u00e1cil usar as APIs do Node.js para interagir com o sistema de arquivos e realizar muitas opera\u00e7\u00f5es complexas, e saber como manobrar atrav\u00e9s delas ir\u00e1 aumentar sua produtividade.<\/p>\n<p>Vamos come\u00e7ar!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pr\u00e9-requisitos para entender o sistema de arquivos Node.js<\/h2>\n<p>O principal pr\u00e9-requisito \u00e9 a instala\u00e7\u00e3o do Node.js no seu sistema operacional. O Node.js n\u00e3o requer nenhum hardware complexo para executar, facilitando o <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-instalar-o-node-js\/\" rel=\"noopener\">download e a instala\u00e7\u00e3o do Node.js<\/a> em seu computador.<\/p>\n<p>Ajudaria se voc\u00ea tamb\u00e9m tivesse um <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-javascript\/\" rel=\"noopener\">conhecimento b\u00e1sico de JavaScript<\/a> para trabalhar em m\u00f3dulos Node.js como sistemas de arquivos (tamb\u00e9m conhecidos como &#8220;FS&#8221; ou &#8220;fs&#8221;). Um entendimento de alto n\u00edvel das fun\u00e7\u00f5es JavaScript, fun\u00e7\u00f5es de retorno de chamada (callback) e promessas o <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/#javascript\">ajudar\u00e1 a compreender esse assunto ainda<\/a> mais r\u00e1pido.<\/p>\n<h2>M\u00f3dulo de sistema de arquivos do Node.js<\/h2>\n<p>Trabalhar com arquivos e diret\u00f3rios \u00e9 uma das necessidades b\u00e1sicas de um aplicativo fullstack. Seus usu\u00e1rios podem querer enviar imagens, curr\u00edculos ou outros arquivos para um servidor. Ao mesmo tempo, seu aplicativo pode precisar ler arquivos de configura\u00e7\u00e3o, mover arquivos, ou mesmo mudar suas permiss\u00f5es programaticamente.<\/p>\n<p>O m\u00f3dulo de sistema de arquivos Node.js tem tudo isso. Ele fornece v\u00e1rias APIs para interagir com os sistemas de arquivos de forma transparente. A maioria das APIs s\u00e3o customiz\u00e1veis com op\u00e7\u00f5es e flags. Voc\u00ea tamb\u00e9m pode us\u00e1-las para realizar opera\u00e7\u00f5es de arquivo tanto s\u00edncronas quanto ass\u00edncronas.<\/p>\n<p>Antes de abordarmos detalhadamente o m\u00f3dulo de sistema de arquivos, vamos dar uma olhada no que o m\u00f3dulo Node.js \u00e9.<\/p>\n<h3>M\u00f3dulos do Node.js<\/h3>\n<p>Os m\u00f3dulos Node.js s\u00e3o um conjunto de funcionalidades dispon\u00edveis como APIs para um programa de consumo a ser utilizado. Por exemplo, voc\u00ea tem o m\u00f3dulo <code>fs<\/code> para interagir com o sistema de arquivos. Da mesma forma, um m\u00f3dulo <code>http<\/code> utiliza suas fun\u00e7\u00f5es para criar um servidor e muitas outras opera\u00e7\u00f5es. O Node.js oferece muitos m\u00f3dulos para abstrair muitas funcionalidades de baixo n\u00edvel para voc\u00ea.<\/p>\n<p>Voc\u00ea pode fazer seus pr\u00f3prios m\u00f3dulos tamb\u00e9m. Com Node.js vers\u00e3o 14 e seguintes, voc\u00ea pode criar e usar os m\u00f3dulos Node.js de duas maneiras: M\u00f3dulos CommonJS (CJS) e ESM (MJS). Todos os exemplos que veremos neste artigo est\u00e3o no estilo CJS.<\/p>\n<h2>Trabalhando com arquivos no Node.js<\/h2>\n<p>Trabalhar com arquivos envolve v\u00e1rias opera\u00e7\u00f5es com arquivos e diret\u00f3rios (pastas). Agora vamos aprender sobre cada uma dessas opera\u00e7\u00f5es com exemplos de c\u00f3digo-fonte. Abra seu <a href=\"https:\/\/kinsta.com\/pt\/blog\/ferramentas-de-revisao-de-codigo\/\">editor de c\u00f3digo-fonte<\/a> favorito e teste conforme a explica\u00e7\u00e3o.<\/p>\n<p>Primeiro, importe o m\u00f3dulo <code>fs<\/code> para o seu arquivo-fonte para come\u00e7ar a trabalhar com os m\u00e9todos do sistema de arquivos. No estilo CJS, usamos o m\u00e9todo <code>require<\/code> para importar um m\u00e9todo a partir de um m\u00f3dulo. Ent\u00e3o, para importar e usar os m\u00e9todos do m\u00f3dulo fs, voc\u00ea faria isso:<\/p>\n<pre><code class=\"language-js\">const { writeFile } = require('fs\/promises');<\/code><\/pre>\n<p>Al\u00e9m disso, note que estamos importando o m\u00e9todo <code>writeFile<\/code> a partir do pacote <code>fs\/promises<\/code>. Queremos usar os m\u00e9todos com promessas porque s\u00e3o mais recentes e f\u00e1ceis de usar com as palavras-chave async\/await e exigem menos c\u00f3digo. Outras alternativas s\u00e3o os m\u00e9todos s\u00edncronos e as fun\u00e7\u00f5es de callback que veremos mais adiante.<\/p>\n<h3>Como criar e escrever em um arquivo<\/h3>\n<p>Voc\u00ea pode criar e escrever em um arquivo de tr\u00eas maneiras:<\/p>\n<ol>\n<li>Usando o m\u00e9todo <code>writeFile<\/code><\/li>\n<li>Usando o m\u00e9todo <code>appendFile<\/code><\/li>\n<li>Usando o m\u00e9todo <code>openFile<\/code><\/li>\n<\/ol>\n<p>Estes m\u00e9todos aceitam um caminho de arquivo e os dados como conte\u00fado para escrever no arquivo. Se o arquivo existe, eles substituem o conte\u00fado do arquivo. Caso contr\u00e1rio, eles criam um novo arquivo com o conte\u00fado.<\/p>\n<h4>1. Usando o m\u00e9todo writeFile<\/h4>\n<p>O trecho de c\u00f3digo abaixo mostra o uso do m\u00e9todo <code>writeFile<\/code>. Comece criando um arquivo chamado <strong>createFile.js<\/strong> usando o snippet abaixo:<\/p>\n<pre><code class=\"language-js\">const { writeFile } = require('fs\/promises');\nasync function writeToFile(fileName, data) {\n  try {\n    await writeFile(fileName, data);\n    console.log(`Wrote data to ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to write the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Note que estamos usando a palavra-chave <code>await<\/code> para chamar o m\u00e9todo, uma vez que ele retorna uma promessa JavaScript. Uma promessa de sucesso ir\u00e1 criar\/escrever no arquivo. Temos um bloco de tentativas para lidar com erros caso a promessa seja rejeitada.<\/p>\n<p>Agora podemos chamar a fun\u00e7\u00e3o <code>writeToFile<\/code>:<\/p>\n<pre><code class=\"language-js\">writeToFile('friends.txt', 'Bob');<\/code><\/pre>\n<p>Em seguida, abra um prompt de comando ou terminal e execute o programa acima usando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">node createFile.js<\/code><\/pre>\n<p>Ele ir\u00e1 criar um novo arquivo chamado <strong>friends.txt<\/strong> com uma linha que simplesmente diz:<\/p>\n<pre><code class=\"language-html\">Bob<\/code><\/pre>\n<h4>2. Usando o m\u00e9todo appendFile<\/h4>\n<p>Como o nome indica, o principal uso deste m\u00e9todo \u00e9 anexar e editar um arquivo. Entretanto, voc\u00ea tamb\u00e9m pode usar o mesmo m\u00e9todo para criar um arquivo.<\/p>\n<p>Observe a fun\u00e7\u00e3o abaixo. Usamos o m\u00e9todo <code>appendFile<\/code> com a flag <code>w<\/code> para escrever um arquivo. A flag padr\u00e3o para anexar a um arquivo \u00e9 <code>a<\/code>:<\/p>\n<pre><code class=\"language-js\">const { appendFile} = require('fs\/promises');\n\nasync function appendToFile(fileName, data) {\n  try {\n    await appendFile(fileName, data, { flag: 'w' });\n    console.log(`Appended data to ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to append the file: {error.message}`);\n  }\n}<\/code><\/pre>\n<p>Agora, voc\u00ea pode chamar a fun\u00e7\u00e3o acima desta forma:<\/p>\n<pre><code class=\"language-js\">appendToFile('activities.txt', 'Skiing');<\/code><\/pre>\n<p>Em seguida, voc\u00ea pode executar o c\u00f3digo no ambiente Node.js usando o comando node, como vimos anteriormente. Isso criar\u00e1 um arquivo chamado <strong>activities.txt<\/strong> com o conte\u00fado <code>Skiing<\/code> nele.<\/p>\n<h4>3. Usando o m\u00e9todo open<\/h4>\n<p>O \u00faltimo m\u00e9todo que vamos aprender para criar e escrever em um arquivo \u00e9 o m\u00e9todo <code>open<\/code>. Voc\u00ea pode abrir um arquivo usando a flag <code>w<\/code> (para &#8220;write&#8221;):<\/p>\n<pre><code class=\"language-js\">const { open} = require('fs\/promises');\n\nasync function openFile(fileName, data) {\n  try {\n    const file = await open(fileName, 'w');\n    await file.write(data);\n    console.log(`Opened file ${fileName}`);\n  } catch (error) {\n    console.error(`Got an error trying to open the file: {error.message}`);\n  }\n}<\/code><\/pre>\n<p>Agora chame a fun\u00e7\u00e3o <code>openFile<\/code> com:<\/p>\n<pre><code class=\"language-js\">openFile('tasks.txt', 'Do homework');<\/code><\/pre>\n<p>Quando voc\u00ea executar o script usando o comando node, voc\u00ea ter\u00e1 um arquivo chamado <strong>tasks.txt<\/strong> criado com o conte\u00fado inicial:<\/p>\n<pre><code class=\"language-html\">Do homework<\/code><\/pre>\n<h3>Como ler um arquivo<\/h3>\n<p>Agora que sabemos como criar e escrever em um arquivo, vamos aprender a ler o conte\u00fado do arquivo. Vamos usar o m\u00e9todo <code>readFile<\/code> do m\u00f3dulo de sistema de arquivos para fazer isso.<\/p>\n<p>Crie um arquivo chamado <strong>readThisFile.js<\/strong> com o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">\/\/ readThisFile.js\nconst { readFile } = require('fs\/promises');\nasync function readThisFile(filePath) {\n  try {\n    const data = await readFile(filePath);\n    console.log(data.toString());\n  } catch (error) {\n    console.error(`Got an error trying to read the file: {error.message}`);\n }\n}<\/code><\/pre>\n<p>Agora vamos ler todos os tr\u00eas arquivos que criamos invocando a fun\u00e7\u00e3o <code>readThisFile<\/code>:<\/p>\n<pre><code class=\"language-js\">readThisFile('activities.txt');\nreadThisFile('friends.txt');\nreadThisFile('tasks.txt');<\/code><\/pre>\n<p>Finalmente, execute o script usando o seguinte comando de Node:<\/p>\n<pre><code class=\"language-bash\">node readThisFile.js<\/code><\/pre>\n<p>Voc\u00ea deve ver a seguinte sa\u00edda no console:<\/p>\n<pre><code class=\"language-html\">Skiing\nDo homework\nBob<\/code><\/pre>\n<p>Um ponto a ser observado aqui: O m\u00e9todo <code>readFile<\/code> l\u00ea o arquivo de forma ass\u00edncrona. Isso significa que a ordem que voc\u00ea l\u00ea o arquivo e a ordem que voc\u00ea obt\u00e9m uma resposta para imprimir no console pode n\u00e3o ser a mesma. Voc\u00ea tem que usar a vers\u00e3o s\u00edncrona do m\u00e9todo <code>readFile<\/code> para obt\u00ea-lo em ordem. Veremos isso aqui em pouco tempo.<\/p>\n<h3>Como renomear um arquivo<\/h3>\n<p>Para renomear um arquivo, use o m\u00e9todo de renomea\u00e7\u00e3o do m\u00f3dulo fs. Vamos criar um arquivo chamado <strong>renamee-me.txt<\/strong>. Vamos renomear este arquivo programaticamente.<\/p>\n<p>Crie um arquivo chamado <strong>renomeFile.js<\/strong> com o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">const { rename } = require('fs\/promises');\n\nasync function renameFile(from, to) {\n  try {\n    await rename(from, to);\n    console.log(`Renamed ${from} to ${to}`);\n  } catch (error) {\n    console.error(`Got an error trying to rename the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Como voc\u00ea deve ter notado, o m\u00e9todo de renomea\u00e7\u00e3o leva dois argumentos. Um \u00e9 o arquivo com o nome da fonte, e o outro \u00e9 o nome do alvo.<\/p>\n<p>Agora vamos chamar a fun\u00e7\u00e3o acima para renomear o arquivo:<\/p>\n<pre><code class=\"language-js\">const oldName = \"rename-me.txt\";\nconst newName = \"renamed.txt\";\nrenameFile(oldName, newName);<\/code><\/pre>\n<p>Como antes, execute o arquivo de script usando o comando de Node para renomear o arquivo:<\/p>\n<pre><code class=\"language-bash\">node renameFile.js<\/code><\/pre>\n<h3>Como mover um arquivo<\/h3>\n<p>Mover um arquivo de um diret\u00f3rio para outro \u00e9 similar a renomear seu caminho. Ent\u00e3o, podemos usar o pr\u00f3prio m\u00e9todo <code>rename<\/code> para mover arquivos.<\/p>\n<p>Vamos criar duas pastas, <strong>from<\/strong>\u00a0e <strong>to<\/strong>. Ent\u00e3o vamos criar um arquivo chamado <strong>move-me.txt <\/strong>dentro da pasta <strong>from<\/strong>\u00a0e <strong>to<\/strong>.<\/p>\n<p>A seguir, escreveremos o c\u00f3digo para mover o arquivo <strong>move-me.txt.<\/strong> Crie um arquivo chamado <strong>moveFile.js<\/strong> com o seguinte snippet:<\/p>\n<pre><code class=\"language-js\">const { rename } = require('fs\/promises');\nconst { join } = require('path');\nasync function moveFile(from, to) {\n  try {\n    await rename(from, to);\n    console.log(`Moved ${from} to ${to}`);\n  } catch (error) {\n    console.error(`Got an error trying to move the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Como voc\u00ea pode ver, estamos usando o m\u00e9todo <code>rename<\/code> exatamente como antes. Mas por que precisamos importar o m\u00e9todo <code>join<\/code> do m\u00f3dulo <code>path<\/code> (sim, o caminho \u00e9 outro m\u00f3dulo crucial do Node.js)?<\/p>\n<p>O m\u00e9todo <code>join<\/code> \u00e9 usado para unir v\u00e1rios segmentos de caminho especificados para formar um caminho. O usaremos para formar o caminho dos nomes dos arquivos de origem e destino:<\/p>\n<pre><code class=\"language-js\">const fromPath = join(__dirname, \"from\", \"move-me.txt\");\nconst destPath = join(__dirname, \"to\", \"move-me.txt\");\nmoveFile(fromPath, destPath);<\/code><\/pre>\n<p>E \u00e9 isso a\u00ed! Se voc\u00ea executar o script <strong>moveFile.js<\/strong>, voc\u00ea ver\u00e1 o arquivo <strong>move-me.txt<\/strong> movido para a pasta <strong>move-me.txt<\/strong>.<\/p>\n<h3>Como copiar um arquivo<\/h3>\n<p>Usamos o m\u00e9todo <code>copyFile<\/code> do m\u00f3dulo <code>fs<\/code> para copiar um arquivo da fonte para o destino.<\/p>\n<p>Observe o snippet de c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-js\">const { copyFile } = require('fs\/promises');\nconst { join } = require('path');\nasync function copyAFile(from, to) {\n  try {\n    await copyFile(from, to);\n    console.log(`Copied ${from} to ${to}`);\n  } catch (err) {\n    console.error(`Got an error trying to copy the file: ${err.message}`);\n  }\n}<\/code><\/pre>\n<p>Agora voc\u00ea pode chamar a fun\u00e7\u00e3o acima com:<\/p>\n<pre><code class=\"language-js\">copyAFile('friends.txt', 'friends-copy.txt');<\/code><\/pre>\n<p>Ele ir\u00e1 copiar o conte\u00fado do <strong>friends.txt<\/strong> para o arquivo <strong>friends-copy.txt<\/strong>.<\/p>\n<p>Agora, isso \u00e9 \u00f3timo, mas como voc\u00ea copia m\u00faltiplos arquivos?<\/p>\n<p>Voc\u00ea pode usar a API <code>Promise.all<\/code> para executar m\u00faltiplas promessas em paralelo:<\/p>\n<pre><code class=\"language-js\">async function copyAll(fromDir, toDir, filePaths) {\n  return Promise.all(filePaths.map(filePath =&gt; {\n   return copyAFile(join(fromDir, filePath), join(toDir, filePath));\n  }));\n}<\/code><\/pre>\n<p>Agora voc\u00ea pode fornecer todos os caminhos de arquivos para copiar de um diret\u00f3rio para outro:<\/p>\n<pre><code class=\"language-js\">copyFiles('from', 'to', ['copyA.txt', 'copyB.txt']);<\/code><\/pre>\n<p>Voc\u00ea tamb\u00e9m pode usar esta abordagem para realizar outras opera\u00e7\u00f5es como mover, escrever e ler arquivos em paralelo.<\/p>\n<h3>Como excluir um arquivo<\/h3>\n<p>Usamos o m\u00e9todo <code>unlink<\/code> para excluir um arquivo:<\/p>\n<pre><code class=\"language-js\">const { unlink } = require('fs\/promises');\nasync function deleteFile(filePath) {\n  try {\n    await unlink(filePath);\n    console.log(`Deleted ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to delete the file: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Lembre-se, voc\u00ea precisar\u00e1 fornecer o caminho para o arquivo para excluir:<\/p>\n<pre><code class=\"language-js\">deleteFile('delete-me.txt');<\/code><\/pre>\n<p>Note que se o caminho for um link simb\u00f3lico para outro arquivo, o m\u00e9todo de destravamento cancelar\u00e1 o link simb\u00f3lico, mas o arquivo original ser\u00e1 intocado. Falaremos mais sobre links simb\u00f3licos mais tarde.<\/p>\n<h3>Como mudar as permiss\u00f5es e a propriedade do arquivo<\/h3>\n<p>Voc\u00ea pode, em algum momento, querer mudar programaticamente as permiss\u00f5es dos arquivos. Isso pode ser muito \u00fatil para tornar um arquivo somente leitura ou totalmente acess\u00edvel.<\/p>\n<p>Usaremos o m\u00e9todo <code>chmod<\/code> para mudar a permiss\u00e3o de um arquivo:<\/p>\n<pre><code class=\"language-js\">const { chmod } = require('fs\/promises');\nasync function changePermission(filePath, permission) {\n  try {\n    await chmod(filePath, permission);\n    console.log(`Changed permission to ${permission} for ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to change permission: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Podemos passar o caminho do arquivo e o bitmask de permiss\u00e3o para alterar as permiss\u00f5es.<\/p>\n<p>Aqui est\u00e1 a chamada de fun\u00e7\u00e3o para alterar a permiss\u00e3o de um arquivo para somente leitura:<\/p>\n<pre><code class=\"language-js\">changePermission('permission.txt', 0o400);<\/code><\/pre>\n<p>Semelhante \u00e0 permiss\u00e3o, voc\u00ea tamb\u00e9m pode mudar a propriedade de um arquivo programaticamente. Usamos o m\u00e9todo <code>chown<\/code> para fazer isso:<\/p>\n<pre><code class=\"language-js\">const { chown } = require('fs\/promises');\n\nasync function changeOwnership(filePath, userId, groupId) {\n  try {\n    await chown(filePath, userId, groupId);\n    console.log(`Changed ownership to ${userId}:${groupId} for ${filePath}`);\n  } catch (error) {\n    console.error(`Got an error trying to change ownership: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Ent\u00e3o chamamos a fun\u00e7\u00e3o com o caminho do arquivo, ID do usu\u00e1rio e ID do grupo:<\/p>\n<pre><code class=\"language-js\">changeOwnership('ownership.txt', 1000, 1010);<\/code><\/pre>\n<h3>Como criar um symlink<\/h3>\n<p>O <a href=\"https:\/\/kinsta.com\/blog\/managing-wordpress-development-with-symlinks\/\" rel=\"noopener\">link simb\u00f3lico (tamb\u00e9m conhecido como symlink)<\/a> \u00e9 um conceito de sistema de arquivos para criar um link para um arquivo ou pasta. Criamos links simb\u00f3licos para criar shortcodes para um arquivo\/pasta de destino no sistema de arquivos. O m\u00f3dulo Node.js <code>filesystem<\/code> fornece o m\u00e9todo <code>symlink<\/code> para criar um link simb\u00f3lico.<\/p>\n<p>Para criar o link simb\u00f3lico, precisamos passar o caminho do arquivo alvo, o caminho do arquivo real e digitar:<\/p>\n<pre><code class=\"language-js\">const { symlink } = require('fs\/promises');\nconst { join } = require('path');\nasync function createSymlink(target, path, type) {\n  try {\n    await symlink(target, path, type);\n    console.log(`Created symlink to ${target} at ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the symlink: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Podemos chamar a fun\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-js\">createSymlink('join(__dirname, from, symMe.txt)', 'symToFile', 'file');<\/code><\/pre>\n<p>Aqui criamos um link simb\u00f3lico chamado <code>symToFile<\/code>.<\/p>\n<h3>Como observar as altera\u00e7\u00f5es de um arquivo<\/h3>\n<p>Voc\u00ea sabia que voc\u00ea pode observar as altera\u00e7\u00f5es acontecendo em um arquivo? \u00c9 uma \u00f3tima maneira de monitorar altera\u00e7\u00f5es e eventos, especialmente quando voc\u00ea n\u00e3o est\u00e1 esperando por eles. Voc\u00ea pode captur\u00e1-las e audit\u00e1-las para revis\u00e3o posterior.<\/p>\n<p>O m\u00e9todo <code>watch<\/code> \u00e9 a melhor maneira de assistir \u00e0s altera\u00e7\u00f5es de arquivo. H\u00e1 um m\u00e9todo alternativo chamado <code>watchFile<\/code>, mas n\u00e3o \u00e9 t\u00e3o performante quanto o m\u00e9todo <code>watch<\/code>.<\/p>\n<p>At\u00e9 agora, usamos o m\u00e9todo de m\u00f3dulo de sistema de arquivos com palavras-chave async\/await. Veremos os usos da fun\u00e7\u00e3o callback com este exemplo.<\/p>\n<p>O m\u00e9todo <code>watch<\/code> aceita o caminho do arquivo e uma fun\u00e7\u00e3o de chamada de retorno como argumentos. Sempre que uma atividade ocorre no arquivo, a fun\u00e7\u00e3o <code>callback<\/code> \u00e9 chamada.<\/p>\n<p>Podemos aproveitar o par\u00e2metro <code>event<\/code> para obter mais informa\u00e7\u00f5es sobre as atividades:<\/p>\n<pre><code class=\"language-js\">const fs = require('fs');\nfunction watchAFile(file) {\n  fs.watch(file, (event, filename) =&gt; {\n    console.log(`${filename} file Changed`);\n  });\n}<\/code><\/pre>\n<p>Chame a fun\u00e7\u00e3o passando um nome de arquivo para <code>watch<\/code>:<\/p>\n<pre><code class=\"language-js\">watchAFile('friends.txt');<\/code><\/pre>\n<p>Agora estamos capturando automaticamente qualquer atividade no arquivo <strong>friends.txt.<\/strong><\/p>\n<h2>Trabalhando com diret\u00f3rios (pastas) no Node.js<\/h2>\n<p>Vamos aprender como realizar opera\u00e7\u00f5es em diret\u00f3rios ou pastas. Muitas das opera\u00e7\u00f5es como renomear, mover e copiar s\u00e3o similares ao que vimos para os arquivos. Entretanto, m\u00e9todos e opera\u00e7\u00f5es espec\u00edficas s\u00e3o utiliz\u00e1veis apenas em diret\u00f3rios.<\/p>\n<h3>Como criar um diret\u00f3rio<\/h3>\n<p>Usamos o m\u00e9todo <code>mkdir<\/code> para criar um diret\u00f3rio. Voc\u00ea precisa passar o nome do diret\u00f3rio como um argumento:<\/p>\n<pre><code class=\"language-js\">const { mkdir } = require('fs\/promises');\nasync function createDirectory(path) {\n  try {\n    await mkdir(path);\n    console.log(`Created directory ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Agora podemos invocar a fun\u00e7\u00e3o <code>createDirectory<\/code> com um caminho de diret\u00f3rio:<\/p>\n<pre><code class=\"language-js\">createDirectory('new-directory');<\/code><\/pre>\n<p>Isso ir\u00e1 criar um diret\u00f3rio chamado <strong>new-directory<\/strong>.<\/p>\n<h3>Como criar um diret\u00f3rio tempor\u00e1rio<\/h3>\n<p>Os diret\u00f3rios tempor\u00e1rios n\u00e3o s\u00e3o diret\u00f3rios regulares. Eles t\u00eam um significado especial para o sistema operacional. Voc\u00ea pode criar um diret\u00f3rio tempor\u00e1rio usando o m\u00e9todo <code>mkdtemp()<\/code>.<\/p>\n<p>Vamos criar uma pasta tempor\u00e1ria no diret\u00f3rio tempor\u00e1rio do seu sistema operacional. Obtemos as informa\u00e7\u00f5es para a localiza\u00e7\u00e3o do diret\u00f3rio tempor\u00e1rio atrav\u00e9s do m\u00e9todo <code>tmpdir()<\/code> do m\u00f3dulo <code>os<\/code>:<\/p>\n<pre><code class=\"language-js\">const { mkdtemp } = require('fs\/promises');\nconst { join } = require('path');\nconst { tmpdir } = require('os');\nasync function createTemporaryDirectory(fileName) {\n  try {\n    const tempDirectory = await mkdtemp(join(tmpdir(), fileName));\n    console.log(`Created temporary directory ${tempDirectory}`);\n  } catch (error) {\n    console.error(`Got an error trying to create the temporary directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Agora, vamos chamar a fun\u00e7\u00e3o com o nome do diret\u00f3rio para cri\u00e1-la:<\/p>\n<pre><code class=\"language-js\">createTemporaryDirectory('node-temp-file-');<\/code><\/pre>\n<p>Note que Node.js adicionar\u00e1 seis caracteres aleat\u00f3rios no final do nome da pasta tempor\u00e1ria criada para mant\u00ea-la \u00fanica.<\/p>\n<h3>Como excluir um diret\u00f3rio<\/h3>\n<p>Voc\u00ea precisa usar o m\u00e9todo <code>rmdir()<\/code> para remover\/eliminar um diret\u00f3rio:<\/p>\n<pre><code class=\"language-js\">const { rmdir } = require('fs\/promises');\nasync function deleteDirectory(path) {\n  try {\n    await rmdir(path);\n    console.log(`Deleted directory ${path}`);\n  } catch (error) {\n    console.error(`Got an error trying to delete the directory: ${error.message}`);\n  }\n}<\/code><\/pre>\n<p>Em seguida, chame a fun\u00e7\u00e3o acima, passando o caminho da pasta que voc\u00ea deseja remover:<\/p>\n<pre><code class=\"language-js\">deleteDirectory('new-directory-renamed');<\/code><\/pre>\n<h2>APIs s\u00edncronas vs ass\u00edncronas<\/h2>\n<p>At\u00e9 agora, vimos muitos exemplos de m\u00e9todos de sistema de arquivos, e todos eles s\u00e3o com usos ass\u00edncronos. No entanto, voc\u00ea pode precisar lidar com algumas opera\u00e7\u00f5es de forma s\u00edncrona.<\/p>\n<p>Um exemplo de opera\u00e7\u00e3o s\u00edncrona \u00e9 a leitura de v\u00e1rios arquivos um ap\u00f3s o outro. O m\u00f3dulo <code>fs<\/code> tem um m\u00e9todo chamado <code>readFileSync()<\/code> para fazer isso:<\/p>\n<pre><code class=\"language-js\">const { readFileSync } = require('fs');\nfunction readFileSynchronously(path) {\n  try {\n    const data = readFileSync(path);\n    console.log(data.toString());\n  } catch (error) {\n    console.error(error);\n  }\n}<\/code><\/pre>\n<p>Note que o m\u00e9todo <code>readFileSync()<\/code> n\u00e3o \u00e9 necess\u00e1rio a partir do pacote &#8220;fs\/promises&#8221;. Isso \u00e9 porque o m\u00e9todo n\u00e3o \u00e9 ass\u00edncrono. Portanto, voc\u00ea pode chamar a fun\u00e7\u00e3o acima com:<\/p>\n<pre><code class=\"language-js\">readFileSynchronously('activities.txt');\nreadFileSynchronously('friends.txt');\nreadFileSynchronously('tasks.txt');<\/code><\/pre>\n<p>Neste caso, todos os arquivos acima ser\u00e3o lidos na ordem em que as fun\u00e7\u00f5es foram chamadas.<\/p>\n<p>O m\u00f3dulo de sistema de arquivos Node.js oferece um m\u00e9todo s\u00edncrono para outras opera\u00e7\u00f5es como a opera\u00e7\u00e3o lida. Use com sabedoria e somente na base do que for necess\u00e1rio. Os m\u00e9todos ass\u00edncronos s\u00e3o muito mais \u00fateis para a execu\u00e7\u00e3o paralela.<\/p>\n<h2>Lidando com erros<\/h2>\n<p>Como qualquer programador sabe, \u00e9 preciso <a href=\"https:\/\/kinsta.com\/pt\/blog\/erros-no-javascript\/\">esperar erros e estar preparado para lidar com eles<\/a> ao realizar opera\u00e7\u00f5es em arquivos ou diret\u00f3rios. E se o arquivo n\u00e3o for encontrado, ou se voc\u00ea n\u00e3o tiver permiss\u00e3o para escrever nele? Existem (e provavelmente haver\u00e1) muitos casos em que voc\u00ea pode encontrar um erro.<\/p>\n<p>Sempre deve-se envolver as chamadas de m\u00e9todo com um bloco try-catch. Dessa forma, se ocorrer um erro, o controle ser\u00e1 transferido para o bloco catch, onde voc\u00ea pode revisar e lidar com o erro. Como voc\u00ea pode ter notado em todos os exemplos acima, utilizamos o bloco try-catch para lidar com os erros que encontramos.<\/p>\n\n<h2>Resumo<\/h2>\n<p>Vamos rever os pontos-chave que abordamos neste tutorial:<\/p>\n<ul>\n<li>O m\u00f3dulo Sistema de arquivos Node.js (fs) tem muitos m\u00e9todos para ajudar em muitas tarefas de baixo n\u00edvel.<\/li>\n<li>Voc\u00ea pode realizar v\u00e1rias opera\u00e7\u00f5es de arquivo como criar, escrever, renomear, copiar, mover, excluir e muitas outras.<\/li>\n<li>Voc\u00ea pode fazer v\u00e1rias opera\u00e7\u00f5es de diret\u00f3rio como criar, diret\u00f3rio tempor\u00e1rio, mover, e muitas outras.<\/li>\n<li>Todos os m\u00e9todos podem ser invocados de forma ass\u00edncrona usando promessas JavaScript ou fun\u00e7\u00f5es de callback.<\/li>\n<li>Voc\u00ea tamb\u00e9m pode invocar os m\u00e9todos de forma s\u00edncrona, se necess\u00e1rio.<\/li>\n<li>Sempre prefira os m\u00e9todos ass\u00edncronos ao s\u00edncrono.<\/li>\n<li>Manuseie os erros com um bloco de tentativa cada vez que voc\u00ea interage com os m\u00e9todos.<\/li>\n<\/ul>\n<p>Agora que trabalhamos um pouco com o sistema de arquivos do Node.js, voc\u00ea deve ter uma boa compreens\u00e3o de seus detalhes. Se voc\u00ea quiser aprofundar ainda mais seu conhecimento, talvez seja interessante explorar os <a href=\"https:\/\/nodejs.org\/api\/stream.html\">fluxos (streams) do Node.js<\/a> como uma progress\u00e3o natural no aprendizado dos m\u00f3dulos do Node.js. Os fluxos s\u00e3o formas eficientes de lidar com a troca de informa\u00e7\u00f5es, incluindo chamadas de rede, leitura\/escrita de arquivos e muito mais.<\/p>\n<p>Voc\u00ea pode encontrar todo o c\u00f3digo-fonte usado neste artigo <a href=\"https:\/\/github.com\/atapas\/nodeX\/tree\/main\/fs-module\" target=\"_blank\" rel=\"noopener noreferrer\">neste Reposit\u00f3rio GitHub<\/a>.<\/p>\n<p>Voc\u00ea est\u00e1 planejando usar o Node.js para o seu pr\u00f3ximo projeto? Compartilhe conosco o motivo da sua escolha na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O JavaScript tem sido uma das linguagens de script mais populares, mas por um longo per\u00edodo, n\u00e3o foi uma grande escolha para o desenvolvimento de aplicativos &#8230;<\/p>\n","protected":false},"author":242,"featured_media":51145,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[523,460,506,930],"topic":[977,992],"class_list":["post-51144","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-javascript","tag-javascript-frameworks","tag-node-js","tag-npm","topic-frameworks-javascript","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)<\/title>\n<meta name=\"description\" content=\"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)\" \/>\n<meta property=\"og:description\" content=\"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-12T07:20:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T20:03:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tapas Adhikary\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tapas Adhikary\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\"},\"author\":{\"name\":\"Tapas Adhikary\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f\"},\"headline\":\"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)\",\"datePublished\":\"2022-07-12T07:20:37+00:00\",\"dateModified\":\"2025-10-01T20:03:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\"},\"wordCount\":2871,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg\",\"keywords\":[\"JavaScript\",\"JavaScript Frameworks\",\"node.js\",\"npm\"],\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\",\"name\":\"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg\",\"datePublished\":\"2022-07-12T07:20:37+00:00\",\"dateModified\":\"2025-10-01T20:03:54+00:00\",\"description\":\"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f\",\"name\":\"Tapas Adhikary\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g\",\"caption\":\"Tapas Adhikary\"},\"description\":\"Tapas Adhikary is a technology blogger, YouTuber, and mentor. He has published over 250 articles sharing his decade's worth of knowledge and experience. He's a passionate contributor to and maintainer of open-source projects.\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/tapasadhikary\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)","description":"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/","og_locale":"pt_PT","og_type":"article","og_title":"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)","og_description":"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.","og_url":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2022-07-12T07:20:37+00:00","article_modified_time":"2025-10-01T20:03:54+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg","type":"image\/jpeg"}],"author":"Tapas Adhikary","twitter_card":"summary_large_image","twitter_description":"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Tapas Adhikary","Tempo estimado de leitura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/"},"author":{"name":"Tapas Adhikary","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f"},"headline":"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)","datePublished":"2022-07-12T07:20:37+00:00","dateModified":"2025-10-01T20:03:54+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/"},"wordCount":2871,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg","keywords":["JavaScript","JavaScript Frameworks","node.js","npm"],"inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/","url":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/","name":"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg","datePublished":"2022-07-12T07:20:37+00:00","dateModified":"2025-10-01T20:03:54+00:00","description":"Voc\u00ea est\u00e1 tendo dificuldade para navegar no m\u00f3dulo de sistema de arquivos do Node.js? Aprenda com esses exemplos como as APIs do m\u00f3dulo podem ajud\u00e1-lo a trabalhar com arquivos e diret\u00f3rios de forma mais eficiente.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/nodejs-fs.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/nodejs-fs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/pt\/topicos\/node-js\/"},{"@type":"ListItem","position":3,"name":"Entendendo o M\u00f3dulo do Sistema de Arquivos Node.js (FS)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/cbf8d294c77f2e4e63a847227b8b676f","name":"Tapas Adhikary","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9665271e577fe06eec74cdff7372f6d3?s=96&d=mm&r=g","caption":"Tapas Adhikary"},"description":"Tapas Adhikary is a technology blogger, YouTuber, and mentor. He has published over 250 articles sharing his decade's worth of knowledge and experience. He's a passionate contributor to and maintainer of open-source projects.","url":"https:\/\/kinsta.com\/pt\/blog\/author\/tapasadhikary\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/51144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/242"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=51144"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/51144\/revisions"}],"predecessor-version":[{"id":61351,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/51144\/revisions\/61351"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51144\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/51145"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=51144"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=51144"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=51144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}