Node.js ファイル システム


Node.js は、UNIX (POSIX) 標準と同様のファイル操作 API のセットを提供します。 Node のインポート ファイル システム モジュール (fs) の構文は次のとおりです。

var fs = require("fs")

非同期と同期

Node.js ファイル システム (fs モジュール) モジュールのメソッドには、非同期バージョンと同期バージョンがあります。たとえば、次の関数があります。ファイルの内容の読み取りには、非同期の fs.readFile() と同期の fs.readFileSync() があります。

非同期メソッド関数の最後のパラメータはコールバック関数であり、コールバック関数の最初のパラメータにはエラー情報(error)が含まれます。

非同期メソッドは、同期と比較してパフォーマンスが高く、速度が速く、ブロッキングがないため、使用することをお勧めします。

以下の内容のinput.txtファイルを作成します:

php中文网官网地址:www.php.cn
文件读取实例

以下のコードでfile.jsファイルを作成します:

var fs = require("fs");

// 异步读取
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());

console.log("程序执行完毕。");

上記のコードの実行結果は次のとおりです:

$ node file.js 
同步读取: php中文网官网地址:www.php.cn
文件读取实例

程序执行完毕。
异步读取: php中文网官网地址:www.php.cn
文件读取实例

次に、 Node.js ファイル システムのメソッドを詳しく見てみましょう。


ファイルを開く

構文

以下は、非同期モードでファイルを開くための構文形式です:

fs.open(path, flags[, mode], callback)

パラメータ

パラメータの使用手順は次のとおりです:

  • path - ファイルのパス。

  • flags - ファイルを開く動作。具体的な値については以下を参照してください。

  • mode - ファイルモード (アクセス許可) を設定します。ファイル作成のデフォルトのアクセス許可は 0666 (読み取り可能、書き込み可能) です。

  • callback - callback(err, fd) などの 2 つのパラメーターを持つコールバック関数。

flags パラメータには次の値を指定できます:

Flag 説明
r ファイルを読み取りモードで開きます。ファイルが存在しない場合は例外をスローします。
r+読み取りおよび書き込みモードでファイルを開きます。ファイルが存在しない場合は例外をスローします。
rs ファイルを同期的に読み取ります。
rs+同期方法でファイルの読み取りと書き込みを行います。
wファイルを書き込みモードで開き、ファイルが存在しない場合は作成します。
wx「w」と同様ですが、ファイルパスが存在する場合、ファイルの書き込みは失敗します。
w+ ファイルを読み書きモードで開き、ファイルが存在しない場合は作成します。
wx+「w+」と似ていますが、ファイルパスが存在する場合、ファイルの読み取りと書き込みは失敗します。
a ファイルを追加モードで開き、存在しない場合は作成します。
ax「a」と似ていますが、ファイルパスが存在する場合、ファイルの追加は失敗します。
a+ ファイルを読み取り追加モードで開き、ファイルが存在しない場合は作成します。
ax+「a+」と似ていますが、ファイルパスが存在する場合、ファイルの読み取りと追加は失敗します。

次に、file.js ファイルを作成し、読み取りと書き込みのために input.txt ファイルを開きます。 コードは次のとおりです。

var fs = require("fs");

// 异步打开文件
console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("文件打开成功!");     
});

上記のコードの実行結果は次のとおりです。

$ node file.js 
准备打开文件!
文件打开成功!

ファイルを取得します。情報

構文

非同期モードでファイル情報を取得するための構文形式は次のとおりです:

fs.stat(path, callback)

パラメータ

パラメータの使用手順は次のとおりです:

  • path - ファイル パス。

  • callback - (err, stats) などの 2 つのパラメーターを持つコールバック関数。stats は fs.Stats オブジェクトです。

fs.stat(path) が実行されると、stats クラスのインスタンスがそのコールバック関数に返されます。 stats クラスで提供されているメソッドを使用して、ファイルの関連属性を確認できます。たとえば、ファイルかどうかを判断するには:

var fs = require('fs');

fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {
    console.log(stats.isFile()); 		//true
})

stats クラスのメソッドは次のとおりです:

Method Description
stats.isFile() ファイルの場合は true を返します。 、それ以外の場合は false を返します。
stats.isDirectory()ディレクトリの場合は true を返し、それ以外の場合は false を返します。
stats.isBlockDevice()ブロックデバイスの場合はtrueを返し、それ以外の場合はfalseを返します。
stats.isCharacterDevice()キャラクターデバイスの場合は true を返し、それ以外の場合は false を返します。
stats.isSymbolicLink()ソフトリンクの場合はtrueを返し、それ以外の場合はfalseを返します。
stats.isFIFO()FIFOの場合はtrueを返し、それ以外の場合はfalseを返します。 FIFO は、UNIX の特殊なタイプのコマンド パイプです。
stats.isSocket() Socket の場合は true を返し、それ以外の場合は false を返します。

次に、file.js ファイルを作成します。コードは次のとおりです:

var fs = require("fs");

console.log("准备打开文件!");
fs.stat('input.txt', function (err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("读取文件信息成功!");
   
   // 检测文件类型
   console.log("是否为文件(isFile) ? " + stats.isFile());
   console.log("是否为目录(isDirectory) ? " + stats.isDirectory());    
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备打开文件!
{ dev: 16777220,
  mode: 33188,
  nlink: 1,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 40333161,
  size: 61,
  blocks: 8,
  atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST),
  mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST),
  ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST) }
读取文件信息成功!
是否为文件(isFile) ? true
是否为目录(isDirectory) ? false

ファイルの書き込み

構文

以下は構文形式です非同期モードでファイルを書き込む場合:

fs.writeFile(filename, data[, options], callback)

ファイルが存在する場合、このメソッドによって書き込まれた内容は古いファイルの内容を上書きします。

パラメータ

パラメータの使用手順は次のとおりです:

  • path - ファイルパス。

  • data - ファイルに書き込まれるデータ。String (文字列) または Buffer (ストリーム) オブジェクトにすることができます。

  • options - このパラメータは、{encoding, mode, flag} を含むオブジェクトです。デフォルトのエンコーディングは utf8、モードは 0666、フラグは 'w' です

  • callback - コールバック関数にはエラー情報パラメーター (err) のみが含まれており、書き込みが失敗した場合に返されます。

次に、file.js ファイルを作成します。コードは次のとおりです:

var fs = require("fs");

console.log("准备写入文件");
fs.writeFile('input.txt', '我是通过写入的文件内容!',  function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("数据写入成功!");
   console.log("--------我是分割线-------------")
   console.log("读取写入的数据!");
   fs.readFile('input.txt', function (err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("异步读取文件数据: " + data.toString());
   });
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备写入文件
数据写入成功!
--------我是分割线-------------
读取写入的数据!
异步读取文件数据: 我是通过写入的文件内容

ファイルの読み取り

構文

以下非同期モードでファイルを読み取ります。 構文形式:

fs.read(fd, buffer, offset, length, position, callback)

このメソッドは、ファイル記述子を使用してファイルを読み取ります。

パラメータ

パラメータの使用手順は次のとおりです:

  • fd - fs.open() メソッドによって返されるファイル記述子。

  • buffer - データが書き込まれるバッファー。

  • offset - バッファ書き込みの書き込みオフセット。

  • length - ファイルから読み取るバイト数。

  • position - ファイル読み取りの開始位置。position の値が null の場合、現在のファイル ポインターの位置から読み取ります。

  • callback - コールバック関数には 3 つのパラメータがあります: err、bytesRead、buffer はエラー メッセージ、bytesRead は読み取られたバイト数を表し、buffer はバッファ オブジェクトです。

input.txt ファイルの内容は次のとおりです:

php中文网官网地址:www.php.cn

次に file.js ファイルを作成します。コードは次のとおりです:

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开已存在的文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }
      console.log(bytes + "  字节被读取");
      
      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备打开已存在的文件!
文件打开成功!
准备读取文件:
42  字节被读取
php中文网官网地址:www.php.cn

file

構文

以下は、非同期モードでファイルを閉じるための構文形式です:

fs.close(fd, callback)

このメソッドは、ファイル記述子を使用してファイルを読み取ります。

パラメータ

パラメータの使用手順は次のとおりです:

  • fd - fs.open() メソッドによって返されるファイル記述子。

  • callback - コールバック関数、パラメータなし。

input.txtファイルの内容は次のとおりです:

php中文网官网地址:www.php.cn

次にfile.jsファイルを作成します。コードは次のとおりです:

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("准备读取文件!");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
         console.log(err);
      }

      // 仅输出读取的字节
      if(bytes > 0){
         console.log(buf.slice(0, bytes).toString());
      }

      // 关闭文件
      fs.close(fd, function(err){
         if (err){
            console.log(err);
         } 
         console.log("文件关闭成功");
      });
   });
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备打开文件!
文件打开成功!
准备读取文件!
php中文网官网地址:www.php.cn
文件关闭成功

ファイルをインターセプトする

構文

以下は、非同期モードでファイルをインターセプトするための構文形式です:

fs.ftruncate(fd, len, callback)

このメソッドは、ファイル記述子を使用してファイルを読み取ります。

パラメータ

パラメータの使用手順は次のとおりです:

  • fd - fs.open() メソッドによって返されるファイル記述子。

  • len - ファイルコンテンツインターセプトの長さ。

  • callback - コールバック関数、パラメータなし。

input.txtファイルの内容は次のとおりです:

site:www.php.cn

次にfile.jsファイルを作成します。コードは次のとおりです:

var fs = require("fs");
var buf = new Buffer(1024);

console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");
   console.log("截取10字节后的文件内容。");
   
   // 截取文件
   fs.ftruncate(fd, 10, function(err){
      if (err){
         console.log(err);
      } 
      console.log("文件截取成功。");
      console.log("读取相同的文件"); 
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
         if (err){
            console.log(err);
         }

         // 仅输出读取的字节
         if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
         }

         // 关闭文件
         fs.close(fd, function(err){
            if (err){
               console.log(err);
            } 
            console.log("文件关闭成功!");
         });
      });
   });
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备打开文件!
文件打开成功!
截取10字节后的文件内容。
文件截取成功。
读取相同的文件
site:www.r
文件关闭成功

ファイルを削除します

構文

ファイルを削除するための構文形式は次のとおりです:

fs.unlink(path, callback)

パラメータ

パラメータの使用手順は次のとおりです:

  • path - ファイルパス。

  • callback - コールバック関数、パラメータなし。

input.txtファイルの内容は次のとおりです:

site:www.php.cn

次にfile.jsファイルを作成します。コードは次のとおりです:

var fs = require("fs");

console.log("准备删除文件!");
fs.unlink('input.txt', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("文件删除成功!");
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备删除文件!
文件删除成功!

みましょうinput.txt ファイルを再度確認すると、このファイルが存在しないことがわかりました。


ディレクトリを作成する

構文

ディレクトリを作成するための構文形式は次のとおりです:

fs.mkdir(path[, mode], callback)

パラメータ

パラメータの使用手順は次のとおりです:

  • path - ファイル パス。

  • mode - ディレクトリのアクセス許可を設定します。デフォルトは 0777 です。

  • callback - コールバック関数、パラメータなし。

次に、file.jsファイルを作成します。コードは次のとおりです:

var fs = require("fs");

console.log("创建目录 /tmp/test/");
fs.mkdir("/tmp/test/",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("目录创建成功。");
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
创建目录 /tmp/test/
目录创建成功。

ディレクトリを読み取ります

構文

以下ディレクトリを読み取るための構文形式です:

fs.readdir(path, callback)

パラメータ

パラメータの使用手順は次のとおりです:

  • path - ファイルパス。

  • callback - コールバック関数。コールバック関数は 2 つのパラメーター err、files を受け取ります。err はエラー メッセージ、files はディレクトリ内のファイル配列リストです。

次に、file.jsファイルを作成します。コードは次のとおりです:

var fs = require("fs");

console.log("查看 /tmp 目录");
fs.readdir("/tmp/",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach( function (file){
       console.log( file );
   });
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
查看 /tmp 目录
input.out
output.out
test
test.txt

ディレクトリを削除します

構文

以下はディレクトリを削除するための構文形式:

fs.rmdir(path, callback)

parameter

パラメータの使用手順は次のとおりです:

  • path - ファイル パス。

  • callback - コールバック関数、パラメータなし。

次に、file.jsファイルを作成します。コードは次のとおりです:

var fs = require("fs");

console.log("准备删除目录 /tmp/test");
fs.rmdir("/tmp/test",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("读取 /tmp 目录");
   fs.readdir("/tmp/",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach( function (file){
          console.log( file );
      });
   });
});

上記のコードの実行結果は次のとおりです:

$ node file.js 
准备删除目录 /tmp/test
input.out
output.out
test
test.txt
读取 /tmp 目录
……

ファイルモジュールメソッドリファレンスマニュアル

以下はNode.js ファイルモジュールと同じメソッドリスト:

789fs.fchownSync(fd, uid, gid)10fs.lchown(path, uid, gid, callback)11fs.lchownSync(パス、uid、gid)12fs.chmod(パス、モード、コールバック)1314fs.fchmodSync(fd, mode)同期 fchmod().fs.lchmod(パス, モード, コールバック)非同期 lchmod( ).コールバック関数パラメータは取られませんが、例外がスローされる場合があります。 Mac OS X でのみ利用可能です。fs.lchmodSync (path, mode) () コールバック関数には 2 つのパラメーター err、stats があり、stats は fs.Stats オブジェクトです。 非同期 lstat() コールバック関数には 2 つのパラメーター err、stats があり、stats は fs.Stats オブジェクトです。 非同期 fstat() コールバック関数には 2 つのパラメーター err、stats があり、stats は fs.Stats オブジェクトです。 stat() のインスタンスを返します。 lstat() のインスタンスを返します。 同期 fstat() は fs.Stats のインスタンスを返します。 252627fs.symlinkSync(srcpath, dstpath[, type])28fs.readlink(path, callback)2930313435363738394041424344454670
シリアル番号メソッドと説明
1fs.rename(oldPath, newPath, callback)
コールバック関数にはパラメータがありませんが、例外がスローされる場合があります。
2fs.ftruncate(fd, len, callback)
非同期 ftruncate() コールバック関数にはパラメーターがありませんが、例外をスローする可能性があります。パラメータはありませんが、例外がスローされる場合があります。
5fs.truncateSync(path, len)
同期truncate()
6fs.chown(path, uid, gid, callback)
非同期chown ().コールバック関数にはパラメータがありませんが、例外をスローする場合があります。
fs.chownSync(path, uid, gid)同期chown()
fs.fchown(fd, uid, gid, callback)非同期fchown()コールバック関数にはパラメータがありませんが、例外がスローされる場合があります。
同期 fchown()
asynch朗らかな lchown( )コールバック関数にはパラメータがありませんが、例外がスローされる場合があります。
同期lchown()
非同期chmod ().コールバック関数にはパラメータがありませんが、例外をスローする場合があります。
fs.chmodSync(パス, モード)同期chmod().
fs.fchmod(fd, モード, コールバック)非同期fchmod() .callback関数パラメータは取られませんが、例外がスローされる場合があります。
15

16

17
19
fs.lstat(path, callback)
20
fs.fstat(fd, callback)
21
fs.statSync(path)
22
fs.lstatSync(path)
23
fs.fstatSync(fd)
24fs.link(srcpath, dstpath, callback)
非同期 link() コールバック関数にはパラメータがありませんが、例外がスローされる可能性があります。
fs.linkSync(srcpath, dstpath)同期リンク().
fs.symlink(srcpath, dstpath[, type])synca恐ろしいシンボリックリンク ( ) コールバック関数にはパラメータがありませんが、例外がスローされる場合があります。 type パラメーターは、「dir」、「file」、または「junction」に設定できます (デフォルトは「file」)。
同期シンボリックリンク().
asynchron readlink() を使用します。コールバック関数には、err と linkString の 2 つのパラメータがあります。
fs.realpath(path[,cache], callback)asynchronous realpath() コールバック関数には 2 つのパラメーター err、resolvedPath があります。
fs.realpathSync(path[,cache])realpath()を同期します。絶対パスを返します。
fs.unlink(path, callback)非同期 unlink() コールバック関数にはパラメータがありませんが、例外をスローする可能性があります。コールバック関数にはパラメータがありませんが、例外がスローされる場合があります。
fs.rmdirSync(path)同期rmdir().
fs.mkdir(path[, mode], callback)S非同期mkディレクトリ(2)。コールバック関数にはパラメータがありませんが、例外がスローされる場合があります。モードのデフォルトは 0777.
fs.mkdirSync(path[, mode])synchronous mkdir().
fs.readdir(path, callback) 非同期readdir (3). ディレクトリの内容を読み取ります。
fs.readdirSync(path) 同期readdir()を返します。
fs.close(fd, callback)非同期 close() コールバック関数にはパラメータがありませんが、例外をスローする可能性があります。
fs.closeSync(fd)同期close().
fs.open(path, flags[, mode], callback)ファイルを非同期で開きます。
fs.openSync(path, flags[, mode])fs.open()の同期バージョン。
fs.utimes(path, atime, mtime, callback )
fs.utimesSync(path, atime, mtime) ファイルのタイムスタンプを変更すると、ファイルは指定されたファイル パスを通過します。
fs.futimes(fd, atime, mtime, callback)
fs.futimesSync(fd, atime, mtime)ファイル記述子で指定されたファイルのタイムスタンプを変更します。
47fs.fsync(fd, callback)
非同期 fsync コールバック関数にはパラメータがありませんが、例外をスローする可能性があります。
48fs.fsyncSync(fd)
Sync fsync.
49fs.write(fd,buffer,offset,length[,position],callback)
は内容をバッファリングしますファイル記述子で指定されたファイルに書き込まれます。
50fs.write(fd, data[,position[,coding]], callback)
ファイル記述子 fd を介してファイルの内容を書き込みます。
51fs.writeSync(fd,buffer,offset,length[,position])
fs.write()の同期バージョン。
52fs.writeSync(fd, data[,position[,coding]])
fs.write()の同期バージョン。
53fs.read(fd,buffer 、オフセット、長さ、位置、コールバック)
ファイル記述子 fd を通じてファイルの内容を読み取ります。
54fs.readSync(fd, バッファ, オフセット, 長さ, 位置)
fs.read.の同期バージョン
55fs.readFile(filename[, options], callback) )
ファイルの内容を非同期的に読み取ります。
56fs.readFileSync(filename[, options])<br fs.readfile.<="" td="">の同期バージョン
57fs .writeFile(filename, data[, options], callback)
ファイルの内容を非同期的に書き込みます。
58fs.writeFileSync(filename, data[, options])
fs.writeFile の同期バージョン。
59fs.appendFile(filename, data[, options], callback)
ファイルの内容を非同期的に追加します。
60fs.appendFileSync(filename, data[, options])
fs.appendFile.
61fs.watchFile(filename[, options],listener)の同期バージョン
ファイルの変更を表示します。
62fs.unwatchFile(filename[,listener])
ファイル名の変更の表示を停止します。
63fs.watch(filename[, options][,listener])
ファイル名の変更を表示します。ファイル名はファイルまたはディレクトリです。 fs.FSWatcher オブジェクトを返します。
64fs.exists(path, callback)
指定されたパスが存在するかどうかを確認します。
65fs.existsSync(path)
fs.exists.の同期バージョン
66fs.access(path[, mode], callback)
指定されたパス。
67fs.accessSync(path[,mode])
fs.accessの同期バージョン。
68fs.createReadStream(path[, options])
ReadStream オブジェクトを返します。
69fs.createWriteStream(path[, options])
WriteStream オブジェクトを返します。
fs.symlink(srcpath, dstpath[, type], callback)非同期 symlink() コールバック関数にはパラメーターがありませんが、例外をスローする可能性があります。
詳細については、公式 Web サイトのファイル モジュールの説明:

ファイル システムをご確認ください。