ノードにおいて、fsモジュールとはファイルを操作するためのモジュールである「ファイルシステムモジュール」を指します。 fs モジュールのほとんどの API は、次の 3 つの操作方法を提供します。 1. 同期ファイル操作: コードはブロックされ、実行を継続しません。 2. 非同期コールバック関数操作ファイル: コードはブロックされず、コールバック関数を実行する必要があります。結果が生成されると、コールバック関数が実行されます。 3. 非同期 Promise オペレーション ファイル: コードはブロックされず、fs.promises を通じてメソッド オペレーションを呼び出すことによって Promise が返されます。
このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 16、DELL G3 コンピューター。
ファイル システム モジュール (略して fs) を使用すると、コンピュータ上のファイル システムにアクセスして対話することができます。
fsモジュールはNode.jsが公式に提供しているファイルを操作するためのモジュールです。ユーザーのファイル操作のニーズを満たす一連のメソッドとプロパティを提供します。
fs.readFile() メソッド。指定されたファイルの内容を読み取るために使用されます。
fs.writeFile() メソッド。JavaScript コードで使用する場合に、指定したファイルにコンテンツを書き込むために使用されます。
ファイルシステム モジュールは、コア Node.js モジュールです。つまり、インストールする必要はありません。必要なのは、fs モジュールを独自のファイルにインポートすることだけです。
したがって、ファイルの先頭に次のように追加します。
const fs = require('fs')これで、接頭辞 fs を使用してファイル システム モジュールから任意のメソッドを呼び出すことができます。
あるいは、次のように fs API から必要なメソッドをインポートすることもできます。
const { writeFile, readFile } = require('fs')注: 便宜上、パス モジュールもインポートする必要があります。これは、ファイルとディレクトリのパスを操作できるようにするもう 1 つのコア Node.js モジュールです。
fs モジュールをインポートした後、以下を追加します。
const path = require('パス')ファイルシステムモジュールを使用する場合、パスモジュールは必要ありません。しかし、それは私たちにとってとても役に立ちます!
fs モジュールのファイル操作は、通常、同期と非同期の 2 つの API をサポートしており、コールバック関数と Promsie フォームも含まれています。通常、同期の後には sync という単語が続きます。
fs モジュールのほとんどの API は、次の 3 つの操作メソッドを提供します。
ファイルの同期操作: コードはブロックされ、実行を継続しません。
非同期コールバック関数操作ファイル: コードはブロックされず、コールバック関数を渡す必要があり、結果が取得されるとコールバック関数が実行されます。
非同期 Promise 操作ファイル: コードはブロックされません。fs.promises を介してメソッド操作を呼び出すと Promise が返され、then および catch を通じて処理できます。
すべての fs メソッドはデフォルトで非同期であることに注意してください。ただし、メソッドの最後に Sync を追加することで、同期されたバージョンを使用できます。
たとえば、writeFile メソッドの同期バージョンは writeFileSync です。同期メソッドはコードを同期的に完了するため、メインスレッドをブロックします。 Node.js でメイン スレッドをブロックすることは悪い習慣と考えられており、行うべきではありません。
したがって、以下ではファイル システム モジュールで非同期メソッドを使用します。
Node.js アプリケーションからファイルに書き込むには、writeFile メソッドを使用します。
writeFile メソッドは少なくとも次のパラメータを受け入れます。
ファイル名内容コールバック指定されたファイルがすでに存在する場合は、古い内容が引数として指定された内容で置き換えられます。指定したファイルが存在しない場合は、新しいファイルが作成されます。
fs モジュールと path モジュールをインポートした後、ファイルに次のコードを記述します。
fs.writeFile('content.txt', '仕事ばかりして遊びもしないと、ジャックはつまらない子になってしまいます!', err => { if (err) throw err process.stdout.write('作成に成功しました!')})上記のコードは、content.txt という名前の新しいファイルを作成し、コンテンツとして「All work and no play makes Jack a鈍感少年!」というテキストを追加します。エラーがある場合、コールバック関数はそのエラーをスローします。それ以外の場合は、ファイルが正常に作成されたことがコンソールに出力されます。
writeFile には他にも次のようなバリエーションがあります。
fs.writeFileSync — ファイルを同期的に書き込む fsPromises.writeFile — Promise ベースの API を使用してファイルを書き込むこの要点を確認してください: https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92
ファイルを読み取る前に、ファイルへのパスを作成して保存する必要があります。ここでは path モジュールのパスが便利です。
join モジュールの path メソッドを使用すると、次のようにファイル パスを作成できます。
const filePath = path.join(process.cwd(), 'content.txt')最初のパラメータ process.cwd() は、現在の作業ディレクトリを返します。ファイル パスがわかったので、ファイルの内容を読み取ることができます。
ファイルに次のコードを記述します。
fs.readFile(filePath, (error, content) => { if (error) throw error process.stdout.write(content)})readFile メソッドは少なくとも 2 つのパラメータを受け入れます。
ファイルパスコールバックエラーがある場合はエラーがスローされます。それ以外の場合は、ファイルの内容が端末に表示されます。
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)})これまでは、端末にコンテンツを出力するために process.stdout.write のみを使用してきました。ただし、上記のコード スニペットのように、単に console.log を使用することもできます。
アプリケーションを実行すると、ディレクトリ内のすべてのファイルを含む配列を取得する必要があります。
この要点を確認してください: https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e
ファイルシステム モジュールには、ファイルを削除できるメソッドがあります。ただし、これはファイルに対してのみ機能し、ディレクトリに対しては機能しないことに注意することが重要です。
ファイル パスをパラメータとして unlink メソッドを呼び出すと、ファイルが削除されます。次のコード スニペットをファイルに追加します。
fs.unlink(filePath, error => { if (error) throw error console.log('ファイルは削除されました!')})コードを再実行すると、ファイルは削除されます。
この要点を確認してください: https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e
mkdir メソッドを使用して、ディレクトリを非同期的に作成できます。ファイルに次のコードを記述します。
fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => { if (err) throw err console.log('フォルダーは正常に作成されました!') })まず、現在の作業ディレクトリに新しいフォルダーを作成します。前に述べたように、cwd() メソッドを使用してプロセス オブジェクトから現在の作業ディレクトリを取得できます。
次に、作成するフォルダーを渡します。ただし、これは、現在の作業ディレクトリに新しいフォルダーを作成する必要があるという意味ではありません。どこにでも作成できます。
ここで、2 番目のパラメータは再帰オプションです。 true に設定されていない場合、複数のフォルダーを作成できません。再帰オプションが false に設定されている場合、上記のコードはエラーになります。試してみてください!
ただし、フォルダーを作成するだけの場合は、再帰オプションを true に設定する必要はありません。
次のコードは正常に動作します。
fs.mkdir(`${process.cwd()}/myFolder`, err => { if (err) throw err console.log('フォルダーは正常に作成されました!')});したがって、再帰の使用を強調したいと思います。フォルダー内にフォルダーを作成する場合は、これを true に設定する必要があります。フォルダーが存在しない場合でも、すべてのフォルダーが作成されます。
一方、フォルダーを作成するだけの場合は、false のままにすることができます。
この要点を確認してください: https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066
ディレクトリを削除するロジックは、ディレクトリを作成する場合と似ています。ディレクトリを作成するために記述されたコードと以下のコードを見ると、類似点がわかります。
したがって、ファイルに次のコードを記述します。
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => { if (err) throw err console.log('フォルダーは正常に削除されました!')})ファイルシステム モジュールから rmdir メソッドを使用し、次のパラメータを渡します。
削除されるディレクトリの再帰的プロパティのコールバックrecursive プロパティが true に設定されている場合、フォルダーとその内容が削除されます。フォルダーにコンテンツが含まれている場合は、これを true に設定する必要があることに注意してください。そうしないとエラーが発生します。
次のコード スニペットは、フォルダーが空の場合にのみ機能します。
fs.rmdir(`${process.cwd()}/myFolder/`, err => { if (err) throw err console.log('フォルダーは正常に削除されました!')})myFolder 内に他のファイルやフォルダーがある場合、{ recursive: true } が渡されないとエラーが発生します。
再帰オプションをいつ使用するべきか、いつ問題を回避すべきかを知ることが重要です。
この要点を確認してください: 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('Directory rename!')});//ファイルの名前を変更 fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile .txt` , err => { if (err) throw err console.log('ファイルの名前が変更されました!')});rename メソッドには 3 つのパラメータが含まれます。
最初のパラメータは既存のフォルダ/ファイルで、2 番目のパラメータは新しい名前のコールバックです。したがって、ファイルまたはディレクトリの名前を変更するには、現在のファイル/ディレクトリの名前と新しい名前を渡す必要があります。アプリケーションの実行後、ディレクトリ/ファイルの名前を更新する必要があります。
新しいパスがすでに存在する場合 (たとえば、ファイル/フォルダーの新しい名前)、そのパスは上書きされることに注意してください。したがって、誤って既存のファイル/フォルダーを上書きしないように注意してください。
この要点を確認してください: https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e
appendFile メソッドを使用して、既存のファイルに新しいコンテンツを追加することもできます。
writeFile と appendFile の 2 つのメソッドを比較すると、それらが似ていることがわかります。ファイルパス、コンテンツ、コールバックを渡します。
fs.appendFile(filePath, 'n仕事ばかりして遊びもしないとジャックは鈍い少年になってしまいます!', err => { if (err) throw err console.log('仕事ばかりして遊びもしないとジャックは鈍い少年になってしまいます!')} )上記のコード スニペットは、既存のファイルに新しいコンテンツを追加する方法を示しています。アプリケーションを実行してファイルを開くと、内部に新しいコンテンツが表示されるはずです。