NodeJs文件系统常用

文件系统是任何一种语言都最常用的,之前一直都没搞懂python的读写模式,看到node文件系统有点明白了

引用

var fs = require("fs")

异步同步

node几乎所有的API都同时支持异步和同步,就这一点几乎算是前端的革命性框架了。

// 异步读取
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());

文件读写及读写模式

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

  • path 文件的路径。
  • flags 文件打开的行为
  • mode 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
  • callback 回调函数,带有两个参数如:callback(err, fd)。
  • openSync 不需要callback参数
// 异步打开
fs.open(path, flags[mode], callback)
// 同步打开
fs.openSync(path, flags[mode])
// 写文件
fs.writeFile(file, data[options], callback)
// 读文件
fs.read(fd, buffer, offset, length, position, callback)

读写模式

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

写文件

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

写文件默认w模式,也就是覆写模式

options:该参数是一个对象,包含 {encoding, mode, flag}。
默认编码为 utf8, 模式为 0666 , flag 为 ‘w’

console.log("准备写入文件:");
fs.writeFile("123.txt", "Hello World被写入!", function(err){
    if (err) {
        return console.log(err);
    }
    console.log("写入完成!");
    fs.readFile("123.txt", function(err, data){
        if (err) {
            return console.error(err);
        }
        console.log("异步读取文件数据: " + data.toString());
    });

});

读文件

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

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • buffer - 数据写入的缓冲区。
  • offset - 缓冲区写入的写入偏移量。
  • length - 要从文件中读取的字节数。
  • position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
  • callback - 回调函数,有三个参数
    • err 为错误信息
    • bytesRead 表示读取的字节数
    • buffer 为缓冲区对象。
fs.open('123.txt', 'r', function(err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("文件打开成功!");

   console.log("准备读取文件:");
   fs.read(data, buf, 0, buf.length, 0, function(err, bytes){
      if (err){
        return console.log(err);
      }

      if(bytes > 0){
         console.log("内容为:", buf.slice(0, bytes).toString());
      }else{
        console.log("读取字节异常:", bytes);
      }
   });
});

获取文件信息

fs.statSync(path[, options])  // 同步
fs.stat(path[, options], callback)  // 异步
  • path 文件路径。
  • callback 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过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() 如果是 Socket 返回 true,否则返回 false。
fs.stat("123.txt", function(err, stat){
    console.log("文件信息:", stat)
});

其他文件操作

  • 关闭文件 fs.close(fd, callback)
  • 截取文件 fs.ftruncate(fd, len, callback)
  • 删除文件 fs.unlink(path, callback)
  • 创建目录 fs.mkdir(path[mode], callback)
  • 查看目录 fs.readdir(path, callback)
  • 删除目录 fs.rmdir(path, callback)

注:
- 查看目录:查看该目录下的文件列
- 删除目录:该目录为空方可删除
- 删除非空目录可参考第三方框架,如rimraf

猜你喜欢

转载自blog.csdn.net/lftaoyuan/article/details/80845205