English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Node FSはNode.jsの内蔵モジュールで、ファイルを処理および操作するのに役立ちます。
Node FSを使用すると、以下のようなファイル操作を実行できます:
ファイルを読み取る
ファイルを作成または上書きする
ファイルを更新する
ファイルの削除
ファイルをリネームする
Node.js は UNIX(POSIX)標準に似たファイル操作 API を提供します。
Node.js ファイルシステムモジュール(fs)のインポート方法は以下の通りです:
var fs = require("fs")
Node.js ファイルシステム(fs モジュール)のメソッドには、非同期と同期のバージョンがあります。例えば、ファイル内容を読み取る関数には、非同期の fs.readFile() と同期の fs.readFileSync() があります。
非同期メソッドの関数の最後の引数はコールバック関数であり、コールバック関数の最初の引数にはエラーメッセージ(error)が含まれます。
非同期メソッドは、同期よりも性能が高く、速度が速く、ブロックも無いため、おすすめです。
input.txt ファイルを作成し、以下の内容を含めます:
基本チュートリアルのウェブサイトアドレス:ja.oldtoolbag.com ファイル読み取りの例
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 同期読み取り: 基礎チュートリアルの公式ウェブサイト:ja.oldtoolbag.com ファイル読み取りの例 プログラムの実行が完了しました。 非同期読み取り: 基礎チュートリアルの公式ウェブサイト:ja.oldtoolbag.com ファイル読み取りの例
次に、Node.js ファイルシステムのメソッドについて具体的に説明しましょう。
以下は非同期モードでファイルを開くための文法形式です:
fs.open(path, flags[, mode], callback)
パラメータの使用方法は以下の通りです:
path - ファイルのパスです。
flags - ファイルを開く動作です。具体的な値は以下を参照してください。
mode - ファイルのモード(権限)を設定します。ファイルのデフォルトの作成権限は0です。666(読み取り可能、書き込み可能)。
callback - コールバック関数は、例えばcallback(err, fd)のように二つの引数を持っています。
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)のように二つの引数を持っています: 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クラスのメソッドには:
メソッド | 説明 |
---|---|
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() | ソケットの場合は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(file, data[, options], callback)
fs.writeFileはデフォルトでファイルを直接オープンします w モードが指定されているため、ファイルが存在する場合、このメソッドで書き込まれる内容は古いファイルの内容を上書きします
パラメータの使用方法は以下の通りです:
file - ファイル名またはファイルディスクリプタ
data - 書き込むファイルのデータで、String(文字列)またはBuffer(バッファ)オブジェクトです
options - このパラメータはオブジェクトで、{encoding, mode, flag}を含んでいます。デフォルトのエンコーディングはutfです8、モードが0に設定されています666 、flagが'w'に設定されています
callback - コールバック関数、コールバック関数はエラーデータパラメータ(err)のみを含み、書き込みが失敗した場合に返されます。
次に file.js ファイルを作成します。以下がそのコードです:
var fs = require("fs"); console.log("ファイルに書き込む準備"); fs.writeFile('input.txt', '私はfs.writeFileを通じてファイルに内容を書き込む', 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.writeFileを通じてファイルに内容を書き込みました
以下は非同期モードでのファイル読み取りの文法形式です:
fs.read(fd, buffer, offset, length, position, callback)
このメソッドはファイルディスクリプタを使用してファイルを読み取ります。
パラメータの使用方法は以下の通りです:
fd - fs.open() メソッドで返されるファイルディスクリプタ。
buffer - データを書き込むバッファー。
offset - バッファーへの書き込みオフセット。
length - ファイルから読み取るバイト数。
position - ファイルを読み取る開始位置、positionの値がnullの場合は現在のファイルポインタの場所から読み取ります。
callback - コールバック関数、err、bytesRead、bufferの3つの引数があります。errはエラーメッセージ、bytesReadは読み取ったバイト数、bufferはバッファーオブジェクトです。
input.txt ファイルの内容は以下の通りです:
基本チュートリアルのウェブサイトアドレス:ja.oldtoolbag.com
次に file.js ファイルを作成します。以下がそのコードです:
var fs = require("fs"); var buf = new Buffer.alloc(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 バイトが読み取られました 基本チュートリアルのウェブサイトアドレス:ja.oldtoolbag.com
以下は非同期モードでのファイル閉じるの文法形式です:
fs.close(fd, callback)
このメソッドはファイルディスクリプタを使用してファイルを読み取ります。
パラメータの使用方法は以下の通りです:
fd - fs.open() メソッドで返されるファイルディスクリプタ。
callback - コールバック関数は引数がありません。
input.txt ファイルの内容は以下の通りです:
基本チュートリアルのウェブサイトアドレス:ja.oldtoolbag.com
次に file.js ファイルを作成します。以下がそのコードです:
var fs = require("fs"); var buf = new Buffer.alloc(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 ファイルを開く準備をします! ファイルが正常に開かれました! ファイルを読み取る準備中! 基本チュートリアルのウェブサイトアドレス:ja.oldtoolbag.com ファイルが正常に閉じられました
以下は非同期モードでのファイル切り取りの文法形式です:
fs.ftruncate(fd, len, callback)
このメソッドはファイルディスクリプタを使用してファイルを読み取ります。
パラメータの使用方法は以下の通りです:
fd - fs.open() メソッドで返されるファイルディスクリプタ。
len - ファイル内容を切り取る長さ。
callback - コールバック関数は引数がありません。
input.txt ファイルの内容は以下の通りです:
site:ja.oldtoolbag.com
次に file.js ファイルを作成します。以下がそのコードです:
var fs = require("fs"); var buf = new Buffer.alloc(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:ja.oldtoolbag.com
次に 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[, options], callback)
パラメータの使用方法は以下の通りです:
path - ファイルパス。
options パラメータには:
recursive - ディレクトリの作成を再帰的に行うかどうか、デフォルトは false
mode - ディレクトリの権限を設定します、デフォルトは 0777。
callback - コールバック関数は引数がありません。
次に file.js ファイルを作成します。以下がそのコードです:
var fs = require("fs"); // tmp ディレクトリは存在する必要があります console.log("ディレクトリの作成", /tmp/test/"); fs.mkdir("/tmp/test/ if (err) { return console.error(err); } console.log("ディレクトリの作成に成功しました。"); });
以上のコードの実行結果は以下の通りです:
$ node file.js ディレクトリの作成 /tmp/test/ ディレクトリの作成に成功しました。
recursive: true というオプションを追加すると、作成されるディレクトリ /tmp と /tmp/a が存在するか:
fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => { if (err) throw err; });
以下はディレクトリの読み取りのための構文形式です:
fs.readdir(path, callback)
パラメータの使用方法は以下の通りです:
path - ファイルパス。
callback - コールバック関数は二つの引数を持っています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)
パラメータの使用方法は以下の通りです:
path - ファイルパス。
callback - コールバック関数は引数がありません。
次に file.js ファイルを作成します。以下がそのコードです:
var fs = require("fs"); // 削除前に空の /tmp/test ディレクトリ 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 読み取り /tmp ディレクトリ ……
以下は Node.js ファイルモジュールの同じメソッドリストです:
番号 | メソッド & 説明 |
---|---|
1 | fs.rename(oldPath, newPath, callback) 非同期 rename()。コールバック関数には引数はありませんが、例外が発生する可能性があります。 |
2 | fs.ftruncate(fd, len, callback) 非同期 ftruncate()。コールバック関数には引数はありませんが、例外が発生する可能性があります。 |
3 | fs.ftruncateSync(fd, len) 同期 ftruncate() |
4 | fs.truncate(path, len, callback) 非同期 truncate()。コールバック関数には引数はありませんが、例外が発生する可能性があります。 |
5 | fs.truncateSync(path, len) 同期truncate() |
6 | fs.chown(path, uid, gid, callback) 非同期chown()。コールバック関数には引数がありませんが、例外を投げることがあります。 |
7 | fs.chownSync(path, uid, gid) 同期chown() |
8 | fs.fchown(fd, uid, gid, callback) 非同期fchown()。コールバック関数には引数がありませんが、例外を投げることがあります。 |
9 | fs.fchownSync(fd, uid, gid) 同期fchown() |
10 | fs.lchown(path, uid, gid, callback) 非同期lchown()。コールバック関数には引数がありませんが、例外を投げることがあります。 |
11 | fs.lchownSync(path, uid, gid) 同期lchown() |
12 | fs.chmod(path, mode, callback) 非同期chmod()。コールバック関数には引数がありませんが、例外を投げることがあります。 |
13 | fs.chmodSync(path, mode) 同期chmod()。 |
14 | fs.fchmod(fd, mode, callback) 非同期fchmod()。コールバック関数には引数がありませんが、例外を投げることがあります。 |
15 | fs.fchmodSync(fd, mode) 同期fchmod()。 |
16 | fs.lchmod(path, mode, callback) 非同期lchmod()。コールバック関数には引数がありませんが、例外を投げることがあります。Mac OS Xのみで利用可能。 |
17 | fs.lchmodSync(path, mode) 同期lchmod()。 |
18 | fs.stat(path, callback) 非同期stat()。コールバック関数にはerrとstatsという2つの引数があります。statsはfs.Statsオブジェクトです。 |
19 | fs.lstat(path, callback) 非同期lstat()。コールバック関数にはerrとstatsという2つの引数があります。statsはfs.Statsオブジェクトです。 |
20 | fs.fstat(fd, callback) 非同期fstat()。コールバック関数にはerrとstatsという2つの引数があります。statsはfs.Statsオブジェクトです。 |
21 | fs.statSync(path) stat()を同期実行します。fs.Statsのインスタンスを返します。 |
22 | fs.lstatSync(path) 同期 lstat()。fs.Stats インスタンスを返します。 |
23 | fs.fstatSync(fd) 同期 fstat()。fs.Stats インスタンスを返します。 |
24 | fs.link(srcpath, dstpath, callback) 非同期 link()。コールバック関数には引数はありませんが、例外が発生する可能性があります。 |
25 | fs.linkSync(srcpath, dstpath) 同期 link()。 |
26 | fs.symlink(srcpath, dstpath[, type], callback) 非同期 symlink()。コールバック関数には引数はありませんが、例外が発生する可能性があります。type パラメータは 'dir'、'file'、または 'junction'(デフォルトは 'file')に設定できます。 |
27 | fs.symlinkSync(srcpath, dstpath[, type]) 同期 symlink()。 |
28 | fs.readlink(path, callback) 非同期 readlink()。コールバック関数には err、linkString の 2 つの引数があります。 |
29 | fs.realpath(path[, cache], callback) 非同期 realpath()。コールバック関数には err、resolvedPath の 2 つの引数があります。 |
30 | fs.realpathSync(path[, cache]) 同期 realpath()。絶対パスを返します。 |
31 | fs.unlink(path, callback) 非同期 unlink()。コールバック関数には引数はありませんが、例外が発生する可能性があります。 |
32 | fs.unlinkSync(path) 同期 unlink()。 |
33 | fs.rmdir(path, callback) 非同期 rmdir()。コールバック関数には引数はありませんが、例外が発生する可能性があります。 |
34 | fs.rmdirSync(path) 同期 rmdir()。 |
35 | fs.mkdir(path[, mode], callback) 非同期 mkdir(2)。コールバック関数には引数はありませんが、例外が発生する可能性があります。デフォルトのアクセス権限は 0 です777。 |
36 | fs.mkdirSync(path[, mode]) 同期 mkdir()。 |
37 | fs.readdir(path, callback) 非同期 readdir()3)。ディレクトリの内容を読み取ります。 |
38 | fs.readdirSync(path) 同期 readdir()。ファイルの配列リストを返します。 |
39 | fs.close(fd, callback) 非同期 close(). コールバック関数には引数がありませんが、例外を投げることがあります。 |
40 | fs.closeSync(fd) 同期 close(). |
41 | fs.open(path, flags[, mode], callback) 非同期ファイルオープン。 |
42 | fs.openSync(path, flags[, mode]) 同期版の fs.open(). |
43 | fs.utimes(path, atime, mtime, callback) |
44 | fs.utimesSync(path, atime, mtime) ファイルタイムスタンプを変更し、ファイルパスで指定します。 |
45 | fs.futimes(fd, atime, mtime, callback) |
46 | fs.futimesSync(fd, atime, mtime) ファイルタイムスタンプを変更し、ファイルディスクリプタで指定します。 |
47 | fs.fsync(fd, callback) 非同期 fsync. コールバック関数には引数がありませんが、例外を投げることがあります。 |
48 | fs.fsyncSync(fd) 同期 fsync. |
49 | fs.write(fd, buffer, offset, length[, position], callback) バッファー内容をファイルディスクリプタで指定されたファイルに書き込みます。 |
50 | fs.write(fd, data[, position[, encoding]], callback) ファイルディスクリプタ fd を通じてファイル内容を書き込みます。 |
51 | fs.writeSync(fd, buffer, offset, length[, position]) 同期版の fs.write()。 |
52 | fs.writeSync(fd, data[, position[, encoding]]) 同期版の fs.write(). |
53 | fs.read(fd, buffer, offset, length, position, callback) ファイルディスクリプタ fd を通じてファイル内容を読み取ります。 |
54 | fs.readSync(fd, buffer, offset, length, position) 同期版の fs.read. |
55 | fs.readFile(filename[, options], callback) ファイル内容の非同期読み取り。 |
56 | fs.readFileSync(filename[, options]) 同期版の fs.readFile. |
57 | fs.writeFile(filename, data[, options], callback) アシンクリンでファイル内容を書き込みます。 |
58 | fs.writeFileSync(filename, data[, options]) fs.writeFileのシンクロナス版。 |
59 | fs.appendFile(filename, data[, options], callback) アシンクリンでファイル内容を追加します。 |
60 | fs.appendFileSync(filename, data[, options]) fs.appendFileのシンクロナス版。 |
61 | fs.watchFile(filename[, options], listener) ファイルの変更を確認します。 |
62 | fs.unwatchFile(filename[, listener]) filenameの変更の監視を停止します。 |
63 | fs.watch(filename[, options][, listener]) filenameの変更を確認します、filenameはファイルまたはディレクトリでできます。fs.FSWatcher オブジェクトを返します。 |
64 | fs.exists(path, callback) 指定されたパスが存在するかを検出します。 |
65 | fs.existsSync(path) fs.existsのシンクロナス版。 |
66 | fs.access(path[, mode], callback) 指定されたパスのユーザー権限をテストします。 |
67 | fs.accessSync(path[, mode]) fs.accessのシンクロナス版。 |
68 | fs.createReadStream(path[, options]) ReadStream オブジェクトを返します。 |
69 | fs.createWriteStream(path[, options]) WriteStream オブジェクトを返します。 |
70 | fs.symlink(srcpath, dstpath[, type], callback) アシンクリン symlink()。コールバック関数にはパラメータがありませんが、例外が投げられる可能性があります。 |
さらに多くの内容は、公式ウェブサイトのファイルモジュール説明を確認してください:ファイルシステム。