Quel est le module fs dans le nœud

青灯夜游
Libérer: 2022-07-12 20:04:44
original
2537 Les gens l'ont consulté

Dans node, le module fs fait référence au "module système de fichiers", qui est un module utilisé pour faire fonctionner les fichiers. La plupart des API du module fs proposent trois méthodes de fonctionnement : 1. Opération de fichier synchrone : le code sera bloqué et ne continuera pas à s'exécuter ; 2. Fichier d'opération de fonction de rappel asynchrone : le code ne sera pas bloqué et une fonction de rappel doit être utilisée. être transmis. Lorsque le résultat est obtenu, la fonction de rappel est exécutée ; 3. Fichier d'opération de promesse asynchrone : le code ne sera pas bloqué et une promesse sera renvoyée en appelant l'opération de méthode via fs.promises.

Quel est le module fs dans le nœud

L'environnement d'exploitation de ce tutoriel : système Windows 7, nodejs version 16, ordinateur DELL G3.

Le module du système de fichiers (fs en abrégé) nous permet d'accéder et d'interagir avec le système de fichiers sur notre ordinateur. Le module

fs est un module officiellement fourni par Node.js pour l'exploitation des fichiers. Il fournit une série de méthodes et de propriétés pour répondre aux besoins d'exploitation des fichiers des utilisateurs.

  • Méthode fs.readFile(), utilisée pour lire le contenu du fichier spécifié

  • Méthode fs.writeFile(), utilisée pour écrire le contenu dans le fichier spécifié Si vous souhaitez utiliser du code JavaScript

Comment utiliser fs

Le module de système de fichiers est un module principal de Node.js. Cela signifie que nous n'avons pas besoin de l'installer. La seule chose que nous devons faire est d'importer le module fs dans son propre fichier.

Donc, en haut du fichier, ajoutez :

const fs = require('fs')
Copier après la connexion

Nous pouvons maintenant appeler n'importe quelle méthode du module du système de fichiers en utilisant le préfixe fs .

Alternativement, nous pouvons simplement importer les méthodes requises depuis l'API fs comme indiqué ci-dessous :

const { writeFile, readFile } = require('fs')
Copier après la connexion

Remarque : Pour plus de commodité, nous devons également importer le module path. Il s'agit d'un autre module principal de Node.js qui nous permet de travailler avec des chemins de fichiers et de répertoires.

Après avoir importé le module fs, ajoutez le fichier :

const path = require('path')
Copier après la connexion

Lors de l'utilisation du module système de fichiers, le module path n'est pas nécessaire. Mais ça nous aide beaucoup !

Synchrone et asynchrone

Les opérations sur les fichiers du module fs prennent généralement en charge les API synchrones et asynchrones, et asynchrone inclut également des fonctions de rappel et des formulaires de promesse. La synchronisation est généralement suivie du mot sync.

L'API du module fs propose principalement trois méthodes de fonctionnement :

  • Opération de fichier synchrone : le code sera bloqué et ne continuera pas à s'exécuter

  • Opération de fichier de fonction de rappel asynchrone : le code ne sera pas bloqué et un rappel doit être passé dans Function, lorsque le résultat est obtenu, la fonction de rappel s'exécute

  • Fichier d'opération de promesse asynchrone : le code ne sera pas bloqué. L'opération de la méthode appelante via fs.promises renverra une promesse, qui peut être. traité ensuite et attrapé.

Il est à noter que par défaut, toutes les méthodes fs sont asynchrones. Cependant, on peut utiliser la version synchronisée en ajoutant Sync à la fin de la méthode.

Par exemple, la version synchrone de la méthode writeFile est writeFileSync. Les méthodes synchrones complètent le code de manière synchrone, elles bloquent donc le thread principal. Bloquer le thread principal dans Node.js est considéré comme une mauvaise pratique et nous ne devrions pas le faire.

Donc, ci-dessous, nous utiliserons tous les méthodes asynchrones du module de système de fichiers.

Écrire un fichier

Pour écrire un fichier depuis une application Node.js, utilisez la méthode writeFile. La méthode writeFile 方法。

writeFile 方法至少接受以下参数:

  • 文件名
  • 内容
  • 回调

如果指定的文件已经存在,它会将旧内容替换为您作为参数提供的内容。如果指定的文件不存在,则创建一个新文件。

导入 fspath 模块后,在文件中编写以下代码:

fs.writeFile('content.txt', 'All work and no play makes Jack a dull boy!', err => {
  if (err) throw err

  process.stdout.write('创建成功!')
})
Copier après la connexion

上面的代码将创建了一个名为 content.txt 的新文件,并添加了文本 All work and no play makes Jack a dull boy! 作为内容。如果存在任何错误,回调函数将抛出该错误。否则,它将向控制台输出文件创建成功。

writeFile 还有其他变体,例如:

  • fs.writeFileSync — 同步写入文件
  • fsPromises.writeFile — 使用基于 Promise 的 API 写入文件

查看此要点:https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92

从文件中读取

在读取文件之前,需要创建并存储文件的路径。path 模块的路径在这里很方便。

使用 join 模块中的 path 方法,您可以创建文件路径,如下所示:

const filePath = path.join(process.cwd(), 'content.txt')
Copier après la connexion

第一个参数 process.cwd() 返回当前工作目录。现在您已经有了文件路径,可以读取文件的内容了。

在文件中编写以下代码:

fs.readFile(filePath, (error, content) => {
  if (error) throw error

  process.stdout.write(content)
})
Copier après la connexion

readFile

writeFile accepte au moins les paramètres suivants : 🎜
    🎜Filename🎜🎜Contents🎜🎜Callback🎜🎜🎜Si le fichier spécifié existe déjà, il remplacera l'ancien contenu par ce que vous fournir comme paramètres le contenu. Si le fichier spécifié n'existe pas, un nouveau fichier est créé. 🎜🎜Après avoir importé les modules fs et path, écrivez le code suivant dans le fichier : 🎜
    fs.readdir(process.cwd(), (error, files) => {
      if (error) throw error
    
      console.log(files)
    })
    Copier après la connexion
    Copier après la connexion
    🎜Le code ci-dessus créera un fichier nommé content.txt< / code> et ajouté le texte <code>Tout travail et aucun jeu fait de Jack un garçon ennuyeux ! comme contenu. S'il y a des erreurs, la fonction de rappel générera cette erreur. Sinon, la console indiquera que le fichier a été créé avec succès. 🎜🎜writeFile Il existe d'autres variantes, telles que : 🎜
      🎜fs.writeFileSync — écrit des fichiers de manière synchrone 🎜🎜fsPromises.writeFile — Écriture dans un fichier à l'aide de l'API basée sur Promise 🎜🎜🎜🎜 Découvrez l'essentiel : https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92 🎜🎜

      Lecture à partir d'un fichier 🎜 🎜Avant de lire le fichier, le chemin d'accès au fichier doit être créé et stocké. chemin Le chemin d'accès au module est pratique ici. 🎜🎜En utilisant la méthode path dans le module join, vous pouvez créer un chemin de fichier comme suit : 🎜
      fs.unlink(filePath, error => {
        if (error) throw error
      
        console.log(&#39;文件已删除!&#39;)
      })
      Copier après la connexion
      Copier après la connexion
      🎜Premier paramètre process.cwd()< /code > Renvoie le répertoire de travail actuel. Maintenant que vous connaissez le chemin du fichier, vous pouvez lire le contenu du fichier. 🎜🎜Écrivez le code suivant dans le fichier : 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) =&gt; { if (err) throw err console.log(&amp;#39;已成功创建文件夹!&amp;#39;) })</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>🎜La méthode <code>readFile accepte au moins deux paramètres : 🎜
      • 文件的路径
      • 回调

      如果有错误,它会抛出一个错误。否则,它会在终端中输出文件内容。

      readFile 还有其他变体,例如:

      • fs.readFileSync — 同步写入文件
      • fsPromises.readFile — 使用基于 Promise 的 API 写入文件

      查看此要点:https://gist.github.com/catalinpit/badc2a539a44412892a0e05a9575d54d

      读取目录的内容

      在目录中显示文件与读取文件内容非常相似。但是,不是传递文件路径,而是传递当前工作目录(我们可以传递任何其他目录)。

      然后,传递一个回调函数来处理响应。在文件中编写以下代码:

      fs.readdir(process.cwd(), (error, files) => {
        if (error) throw error
      
        console.log(files)
      })
      Copier après la connexion
      Copier après la connexion

      到目前为止,我们只使用 process.stdout.write 将内容输出到终端。但是,您可以简单地使用 console.log,就像上面的代码片段一样。

      如果运行该应用程序,我们应该会得到一个包含目录中所有文件的数组。

      查看此要点:https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e

      删除文件

      文件系统模块有一种方法,允许您删除文件。但是,需要注意的是,它只适用于文件,不适用于目录。

      当以文件路径作为参数调用 unlink 方法时,它将删除该文件。将以下代码段添加到文件中:

      fs.unlink(filePath, error => {
        if (error) throw error
      
        console.log(&#39;文件已删除!&#39;)
      })
      Copier après la connexion
      Copier après la connexion

      如果您重新运行代码,您的文件将被删除!

      查看此要点:https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e

      创建目录

      我们可以使用 mkdir 方法异步创建目录。在文件中编写以下代码:

      fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => {
        if (err) throw err
      
        console.log(&#39;已成功创建文件夹!&#39;)
      })
      Copier après la connexion
      Copier après la connexion

      首先,要在当前工作目录中创建一个新文件夹。如前所述,您可以使用 cwd() 方法从 process 对象获取当前工作目录。

      然后,传递要创建的一个或多个文件夹。但是,这并不意味着您必须在当前工作目录中创建新文件夹。你可以在任何地方创建它们。

      现在,第二个参数是递归选项。如果未将其设置为 true,则无法创建多个文件夹。如果将 recursive 选项设置为 false,上述代码将给出一个错误。试试看!

      但是,如果您只想创建一个文件夹,则无需将 recursive 选项设置为 true

      以下代码可以正常工作!

      fs.mkdir(`${process.cwd()}/myFolder`, err => {
        if (err) throw err
      
        console.log(&#39;已成功创建文件夹!&#39;)
      });
      Copier après la connexion

      因此,我想强调使用 recursive。如果要在文件夹中创建文件夹,则需要将其设置为 true。它将创建所有文件夹,即使它们不存在。

      另一方面,如果您只想创建一个文件夹,可以将其保留为 false

      查看此要点:https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066

      删除目录

      删除目录的逻辑类似于创建目录。如果您查看为创建目录而编写的代码和下面的代码,您会发现相似之处。

      因此,在文件中编写以下代码:

      fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => {
        if (err) throw err
      
        console.log(&#39;已成功删除文件夹!&#39;)
      })
      Copier après la connexion

      使用文件系统模块中的 rmdir 方法,并传递以下参数:

      • 要删除的目录
      • 递归属性
      • 回调

      如果将 recursive 属性设置为 true,它将删除文件夹及其内容。请务必注意,如果文件夹中包含内容,则需要将其设置为 true。否则,您将得到一个错误。

      以下代码段仅在文件夹为空时有效:

      fs.rmdir(`${process.cwd()}/myFolder/`, err => {
        if (err) throw err
      
        console.log(&#39;已成功删除文件夹!&#39;)
      })
      Copier après la connexion

      如果 myFolder 中有其他文件和/或文件夹,如果未传递 { recursive: true },则会出现错误。

      知道何时使用 recursive 选项以及何时不避免问题是很重要的。

      查看此要点:https://gist.github.com/catalinpit/a8cb6aca75cef8d6ac5043eae9ba22ce

      目录/文件重命名

      使用 fs 模块,您可以重命名目录和文件。下面的代码片段显示了如何使用 rename 方法进行此操作。

      // 重命名一个目录fs.rename(`${process.cwd()}/myFolder/secondFolder`, `${process.cwd()}/myFolder/newFolder`, err => {
        if (err) throw err
      
        console.log(&#39;目录重命名!&#39;)
      });// 重命名一个文件fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile.txt`, err => {
        if (err) throw err
      
        console.log(&#39;文件重命名!&#39;)
      });
      Copier après la connexion

      rename 方法包含三个参数:

      • 第一个参数是现有的文件夹/文件
      • 第二个参数是新名称
      • 回调

      因此,要重命名文件或目录,我们需要传递当前文件/目录的名称和新名称。运行应用程序后,应更新目录/文件的名称。

      需要注意的是,如果新路径已经存在(例如,文件/文件夹的新名称),它将被覆盖。因此,请确保不要错误地覆盖现有文件/文件夹。

      查看此要点:https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e

      向文件中添加内容

      我们还可以使用 appendFile 方法向现有文件添加新内容。

      如果比较 writeFileappendFile 这两种方法,我们可以发现它们是相似的。传递文件路径、内容和回调。

      fs.appendFile(filePath, &#39;\nAll work and no play makes Jack a dull boy!&#39;, err => {
        if (err) throw err
        
        console.log(&#39;All work and no play makes Jack a dull boy!&#39;)
      })
      Copier après la connexion

      上面的代码片段演示了如何向现有文件添加新内容。如果运行应用程序并打开文件,您应该会看到其中的新内容。

      更多node相关知识,请访问:nodejs 教程

      Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!