Sistem fail Node.js


Node.js menyediakan satu set API operasi fail yang serupa dengan standard UNIX (POSIX). Sintaks modul sistem fail import Node (fs) adalah seperti berikut:

var fs = require("fs")

Asynchronous and synchronous

Kaedah dalam modul sistem fail Node.js (fs module) kedua-duanya tidak segerak dan Versi segerak, sebagai contoh, fungsi untuk membaca kandungan fail termasuk fs.readFile() tak segerak dan fs.readFileSync() segerak.

Parameter terakhir fungsi kaedah tak segerak ialah fungsi panggil balik dan parameter pertama fungsi panggil balik mengandungi maklumat ralat (ralat).

Anda disyorkan menggunakan kaedah tak segerak Berbanding dengan penyegerakan, kaedah tak segerak mempunyai prestasi yang lebih tinggi, kelajuan lebih pantas dan tiada penyekatan.

Contoh

Buat fail input.txt dengan kandungan berikut:

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

Buat fail.js dengan kod berikut:

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("程序执行完毕。");

The keputusan pelaksanaan kod di atas adalah seperti berikut :

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

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

Seterusnya, mari kita lihat dengan lebih dekat kaedah sistem fail Node.js.


Buka fail

Syntax

Berikut ialah format sintaks untuk membuka fail dalam mod tak segerak:

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

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • laluan - laluan fail.

  • bendera - Gelagat membuka fail. Lihat di bawah untuk nilai tertentu.

  • mod - Tetapkan mod fail (kebenaran lalai untuk penciptaan fail ialah 0666 (boleh dibaca, boleh ditulis).

  • panggilan balik - fungsi panggil balik, dengan dua parameter seperti: panggil balik(err, fd).

Parameter bendera boleh menjadi nilai berikut:

Flag描述
r以读取模式打开文件。如果文件不存在抛出异常。
r+以读写模式打开文件。如果文件不存在抛出异常。
rs以同步的方式读取文件。
rs+以同步的方式读取和写入文件。
w以写入模式打开文件,如果文件不存在则创建。
wx类似 'w',但是如果文件路径存在,则文件写入失败。
w+以读写模式打开文件,如果文件不存在则创建。
wx+类似 'w+', 但是如果文件路径存在,则文件读写失败。
a以追加模式打开文件,如果文件不存在则创建。
ax类似 'a', 但是如果文件路径存在,则文件追加失败。
a+以读取追加模式打开文件,如果文件不存在则创建。
ax+类似 'a+', 但是如果文件路径存在,则文件读取追加失败。

Contoh

Seterusnya kami mencipta fail file.js dan membuka fail input.txt untuk membaca dan menulis Kod adalah seperti berikut:

var fs = require("fs");

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

Hasil pelaksanaan kod di atas. adalah seperti berikut:

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

Dapatkan maklumat fail

Syntax

Berikut ialah format sintaks untuk mendapatkan maklumat fail melalui mod tak segerak:

fs.stat(path, callback)

Parameter

Parameter Arahan penggunaan adalah seperti berikut:

  • laluan - laluan fail.

  • panggil balik - fungsi panggil balik, dengan dua parameter seperti: (err, statistik), stats ialah objek fs.Stats.

Selepas fs.stat(path) dilaksanakan, instance kelas statistik akan dikembalikan kepada fungsi panggil baliknya. Anda boleh menentukan atribut fail yang berkaitan melalui kaedah yang disediakan dalam kelas statistik. Contohnya, untuk menentukan sama ada ia adalah fail:

var fs = require('fs');

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

Kaedah dalam kelas statistik ialah:

方法描述
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。

Contoh

Seterusnya kami mencipta fail file.js, kodnya adalah seperti berikut:

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());    
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

$ 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

Tulis fail

Sintaks

Berikut ialah format sintaks untuk menulis fail dalam mod tak segerak:

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

Jika fail wujud, kandungan yang ditulis oleh kaedah ini akan tulis ganti kandungan fail lama.

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • laluan - laluan fail.

  • data - Data yang akan ditulis pada fail, yang boleh menjadi objek String (rentetan) atau Buffer (strim).

  • pilihan - Parameter ini ialah objek yang mengandungi {pengekodan, mod, bendera}. Pengekodan lalai ialah utf8, mod ialah 0666, bendera ialah 'w'

  • panggilan balik - fungsi panggil balik, fungsi panggil balik hanya mengandungi parameter maklumat ralat (err ), apabila menulis Dikembalikan jika entri gagal.

Contoh

Seterusnya kita cipta fail file.js, kodnya adalah seperti berikut:

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());
   });
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Baca fail

Syntax

Berikut ialah format sintaks untuk membaca fail dalam mod tak segerak:

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

Kaedah ini menggunakan deskriptor fail untuk dibaca Dapatkan fail.

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • fd - deskriptor fail dikembalikan oleh fs.open( ) kaedah .

  • penampan - Penampan yang data ditulis.

  • mengimbang - Mengimbang menulis untuk menulis penimbal.

  • panjang - Bilangan bait untuk dibaca daripada fail.

  • kedudukan - Kedudukan permulaan untuk membaca fail Jika nilai kedudukan adalah nol, ia akan dibaca dari kedudukan penuding fail semasa.

  • panggilan balik - fungsi panggil balik dengan tiga parameter err, bytesRead, buffer err ialah mesej ralat, bytesRead mewakili bilangan bait yang dibaca dan penimbal ialah penimbal objek.

Instance

kandungan fail input.txt ialah:

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

Seterusnya kami mencipta fail file.js, kodnya adalah seperti berikut:

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());
      }
   });
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Tutup fail

Syntax

Berikut ialah format sintaks untuk menutup fail dalam mod tak segerak:

fs.close(fd, callback)

Kaedah ini menggunakan deskriptor fail untuk membaca fail.

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • fd - deskriptor fail dikembalikan oleh fs.open( ) kaedah .

  • panggilan balik - fungsi panggil balik, tiada parameter.

Instance

kandungan fail input.txt ialah:

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

Seterusnya kami mencipta fail file.js, kodnya adalah seperti berikut:

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("文件关闭成功");
      });
   });
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Fail pintasan

Sintaks

Berikut ialah format sintaks memintas fail dalam tak segerak mod:

fs.ftruncate(fd, len, callback)

Kaedah ini menggunakan deskriptor fail untuk membaca fail.

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • fd - deskriptor fail dikembalikan oleh fs.open( ) kaedah .

  • len - Panjang kandungan fail yang dipintas.

  • panggilan balik - fungsi panggil balik, tiada parameter.

Instance

kandungan fail input.txt ialah:

site:www.php.cn

Seterusnya kami mencipta fail file.js, kodnya adalah seperti berikut:

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("文件关闭成功!");
         });
      });
   });
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Padam fail

Sintaks

Berikut ialah format sintaks untuk memadam fail :

fs.unlink(path, callback)

Parameter

arahan penggunaan parameter adalah seperti berikut:

  • laluan - laluan fail.

  • panggilan balik - fungsi panggil balik, tiada parameter.

Instance

kandungan fail input.txt ialah:

site:www.php.cn

Seterusnya kami mencipta fail file.js, kodnya adalah seperti berikut:

var fs = require("fs");

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

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Semak fail input.txt sekali lagi dan mendapati ia tidak wujud lagi.


Buat direktori

Syntax

Berikut ialah format sintaks untuk mencipta direktori:

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

Parameter

The arahan penggunaan parameter adalah seperti berikut :

  • laluan - laluan fail.

  • mod - Tetapkan kebenaran direktori, lalai ialah 0777.

  • panggilan balik - fungsi panggil balik, tiada parameter.

Contoh

Seterusnya kita cipta fail file.js, kodnya adalah seperti berikut:

var fs = require("fs");

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

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Baca direktori

Sintaks

Berikut ialah format sintaks untuk membaca direktori:

fs.readdir(path, callback)

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • laluan - laluan fail.

  • panggilan balik - fungsi panggil balik, fungsi panggil balik mengambil dua parameter err, fail, err ialah mesej ralat dan fail ialah senarai tatasusunan fail dalam direktori.

Contoh

Seterusnya kita cipta fail file.js, kodnya adalah seperti berikut:

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 );
   });
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Padam Direktori

Sintaks

Berikut ialah format sintaks untuk memadamkan direktori:

fs.rmdir(path, callback)

Parameter

Arahan penggunaan parameter adalah seperti berikut:

  • laluan - laluan fail.

  • panggilan balik - fungsi panggil balik, tiada parameter.

Contoh

Seterusnya kita cipta fail file.js, kodnya adalah seperti berikut:

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 );
      });
   });
});

Hasil pelaksanaan kod di atas adalah seperti berikut:

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

Manual Rujukan Kaedah Modul Fail

Berikut ialah senarai kaedah yang sama dalam modul fail Node.js:

181920212223
Nombor siriKaedah & Penerangan
1fs.rename(oldPath , newPath, panggil balik)
Asynchronous rename().
2fs.ftruncate(fd, len, panggil balik)
Asynchronous ftruncate(). tetapi boleh membuang pengecualian.
3fs.ftruncateSync(fd, len)
Sync ftruncate()
4fs.truncate(path, len, callback)
Asynchronous truncate().
5fs.truncateSync(path, len)
Sync truncate()
6fs.chown(path, uid, gid, panggil balik)
Asynchronous chown().
7fs.chownSync(path, uid, gid)
Sync chown()
8fs.fchown(fd, uid, gid, panggil balik)
Asynchronous fchown().
9fs.fchownSync(fd, uid, gid)
Sync fchown()
10fs.lchown(path, uid, gid, panggil balik)
Asynchronous lchown().
11fs.lchownSync(path, uid, gid)
Sync lchown()
12fs.chmod(laluan, mod, panggil balik)
Chmod() tak segerak tidak mempunyai parameter, tetapi mungkin membuang pengecualian.
13fs.chmodSync(laluan, mod)
Segerakkan chmod().
14fs.fchmod(fd, mod, panggil balik)
Asynchronous fchmod().
15fs.fchmodSync(fd, mod)
Sync fchmod().
16fs.lchmod(laluan, mod, panggil balik)
lchmod() tak segerak tidak mempunyai parameter, tetapi mungkin mengeluarkan pengecualian. Hanya tersedia pada Mac OS X.
17fs.lchmodSync (laluan, mod) >
fs.stat(path, callback)Asynchronous stat(). Fungsi panggil balik mempunyai dua parameter err, stats, stats Adalah objek fs.Stats.
fs.lstat(path, callback)Asynchronous lstat(). , statistik ialah objek fs.Stats.
fs.fstat(fd, panggil balik)Fstat tak segerak(). , statistik ialah objek fs.Stats.
fs.statSync(path)Sync stat() Mengembalikan tika fs.Stats.
fs.lstatSync(path)Kembalikan tika fs.Stats.
fs.fstatSync(fd)Fstat() segerak Mengembalikan tika fs.Stats.
24fs.link(srcpath, dstpath, callback)
Pautan tak segerak(). tetapi boleh membuang pengecualian.
25fs.linkSync(srcpath, dstpath)
Sync link().
26fs.symlink(srcpath, dstpath[, type], callback)
Asynchronous symlink(). . Parameter jenis boleh ditetapkan kepada 'dir', 'fail' atau 'simpang' (lalai ialah 'fail').
27fs.symlinkSync(srcpath, dstpath[, type])
Sync symlink().
28fs.readlink(path, callback)
Asynchronous readlink() Fungsi panggil balik mempunyai dua parameter err, linkString.
29fs.realpath(path[, cache], callback)
Asynchronous realpath() Terdapat dua fungsi panggil balik Parameter ralat, diselesaikanPath.
30fs.realpathSync(path[, cache])
Segerakkan realpath(). Mengembalikan laluan mutlak.
31fs.unlink(path, callback)
Asynchronous unlink() Fungsi panggil balik tidak mempunyai parameter, tetapi mungkin membuang tidak normal.
32fs.unlinkSync(path)
Sync unlink().
33fs.rmdir(path, callback)
Asynchronous rmdir().
34fs.rmdirSync(path)
Sync rmdir().
35fs.mkdir(path[, mod], panggil balik)
S mkdir asynchronous(2) tidak mempunyai parameter, tetapi boleh membuang pengecualian. mod lalai kepada 0777.
36fs.mkdirSync(path[, mod])
Sync mkdir().
37fs.readdir(laluan, panggil balik)
Baca tak segerak(3).
38fs.readdirSync(path)
Synchronous readdir() Mengembalikan senarai tatasusunan fail.
39fs.close(fd, panggil balik)
Asynchronous close(). membuang tidak normal.
40fs.closeSync(fd)
Sync close().
41fs.open(laluan, bendera[, mod], panggil balik)
Buka fail secara tidak segerak.
42fs.openSync(laluan, bendera[, mod])
Versi penyegerakan fs.open().
43fs.utimes(laluan, masa, masa, panggil balik)
44fs.utimesSync(path, atime, mtime)
Ubah suai cap masa fail dan fail itu melepasi laluan fail yang ditentukan.
45fs.futimes(fd, atime, mtime, panggil balik)
46fs.futimesSync(fd, atime, mtime)
Ubah suai cap masa fail, ditentukan oleh deskriptor fail.
47fs.fsync(fd, panggil balik)
Fsync tak segerak Fungsi panggil balik tidak mempunyai parameter, tetapi boleh membuang pengecualian.
48fs.fsyncSync(fd)
Segerakkan fsync.
49 fs.write(fd, buffer, offset, length[, position], callback)
Tulis kandungan penimbal pada fail yang ditentukan oleh deskriptor fail.
50fs.write(fd, data[, position[, encoding]], callback)
melalui deskriptor fail fd menulis kandungan fail.
51fs.writeSync(fd, buffer, offset, length[, position])
Versi fs.write disegerakkan ().
52fs.writeSync(fd, data[, position[, encoding]])
Versi fs.write disegerakkan ().
53fs.read(fd, buffer, offset, length, position, callback)
melalui penerangan fail Simbol fd membaca kandungan fail.
54fs.readSync(fd, buffer, offset, length, position)
Versi fs.read yang disegerakkan.
55fs.readFile(nama fail[, pilihan], panggil balik)
Baca kandungan fail secara tidak segerak.
56fs.readFileSync(nama fail[, pilihan])<br Versi segerak bagi fs.readfile.<="" td="">
57fs.writeFile(nama fail, data[, pilihan], panggil balik)
Tulis kandungan fail secara tidak segerak.
58fs.writeFileSync(nama fail, data[, pilihan])
Versi fs.writeFile yang disegerakkan.
59fs.appendFail(nama fail, data[, pilihan], panggil balik)
Tambah kandungan fail secara tidak segerak.
60fs.appendFileSync(nama fail, data[, pilihan])
Versi penyegerakan fs.appendFile.
61fs.watchFail(nama fail[, pilihan], pendengar)
Lihat pengubahsuaian fail.
62fs.unwatchFile(nama fail[, pendengar])
Berhenti melihat pengubahsuaian nama fail.
63fs.watch(nama fail[, pilihan][, pendengar])
Lihat pengubahsuaian nama fail, nama fail boleh menjadi fail atau direktori. Mengembalikan objek fs.FSWatcher.
64fs.exists(path, callback)
Mengesan sama ada laluan yang diberikan wujud.
65fs.existsSync(path)
Versi disegerakkan bagi fs.exists.
66fs.access(path[, mod], callback)
Uji kebenaran pengguna pada laluan yang ditentukan.
67fs.accessSync(path[, mod])
Versi segerak fs.access.
68fs.createReadStream(path[, options])
Mengembalikan objek ReadStream.
69fs.createWriteStream(laluan[, pilihan])
Kembalikan objek WriteStream.
70fs.symlink(srcpath, dstpath[, type], callback)
Asynchronous symlink(). parameter fungsi panggil balik, tetapi mungkin membuang pengecualian.

Untuk maklumat lanjut, sila semak penerangan modul fail tapak web rasmi: Sistem Fail.