Node.js关键控制模块API之文档实际操作

参照:https://www.runoob.com/nodejs/nodejs-fs.html

多线程I/O 1,文档实际操作 2,互联网实际操作

在电脑浏览器中也存有多线程实际操作 1,计划任务 2,事故处理 3,Ajax回调函数解决

js的运作是并行处理的,引进事件队列体制,进到事件队列的每日任务关键分二种: Node.js中多线程实行的每日任务:1,文档存取数据(文档I/O) 2,互联网的要求相对应解决(互联网I/O)

Node.js中的事情实体模型与电脑浏览器中的事情实体模型种类:并行处理 事件队列,js的运作是并行处理的,Node.js的自然环境是线程同步的

一、获得文档信息内容

根据多线程方式获得文档信息内容的英语的语法文件格式

fs.stat(path, callback)

fs.stat(path)实行后,会将stats类的案例回到给其调用函数。能够 根据stats类中的给予方式分辨文档的有关特性。比如分辨是不是为文档:

常见方式:

stats.isFile() 如果是文档回到 true,不然回到 false。
stats.isDirectory() 如果是文件目录回到 true,不然回到 false。

 

var fs = require('fs');
fs.stat('01.js', function(err, stats) {
  if(err) return;
  console.log(stats);
  if(stats.isFile()){
    console.log('文档');
  } else if(stats.isDirectory()){
    console.log('文件目录');
  }
});

回到結果:

atime  文档浏览時间

ctime 文档情况信息内容产生变化的時间,例如文档的管理权限

mtime文档数据信息产生变化的時间 

birthtime文件创建時间

Stats {
  dev: 3963844000,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: 4096,
  ino: 7599824371308861,
  size: 326,
  blocks: 0,
  atimeMs: 1621577436001.767,
  mtimeMs: 1621577434724.8518,
  ctimeMs: 1621577434728.6726,
  birthtimeMs: 1621505236836.661,
  atime: 2021-05-21T06:10:36.002Z,
  mtime: 2021-05-21T06:10:34.725Z,
  ctime: 2021-05-21T06:10:34.729Z,
  birthtime: 2021-05-20T10:07:16.837Z
}
文档

二、读文档实际操作

var path = require('path');
var strpath = path.join(__dirname, '02.json');
// 要是没有设定编码方法,那麼获得的是Buffer目标,必须开展变换
fs.readFile(strpath, 'utf-8', function(err, data){
  console.log(data);
});

三、写文档实际操作

多线程方式下载入文档的英语的语法文件格式:

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

writeFile 立即打开文件默认设置是 w 方式,因此 假如文档存有,该方式载入的內容会遮盖旧的文档內容。

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.createReadStream(path[, options]) 回到ReadStream 目标。

fs.createWriteStream(path[, options]) 回到 WriteStream 目标。

var path = require('path');
var fs = require('fs');
// 源途径
var spath = path.join(__dirname, '../doc', 'css.md');
// 总体目标途径
var dpath = path.join('D:\\Users\\peiyuli\\Desktop', 'css.md');

var readStream = fs.createReadStream(spath);
var writeStream = fs.createWriteStream(dpath);

var sum = 0;
// 根据事情的处理方法 以chunk(块)为企业,每一次读取文件尺寸的时候会开启data事情
readStream.on('data', function(chunk){
  sum  ;
  writeStream.write(chunk);
});
// 数据处理方法进行标示 end事情
readStream.on('end', function(){
  console.log('文档解决进行', sum);
});

方式二、简单化步骤

var path = require('path');
var fs = require('fs');
// 源途径
var spath = path.join(__dirname, '../doc', 'css.md');
// 总体目标途径
var dpath = path.join('D:\\Users\\peiyuli\\Desktop', 'css.md');
// 管路方式 将载入流和载入流结合到一块
fs.createReadStream(spath).pipe(fs.createWriteStream(dpath));

五、文件目录的实际操作

fs.mkdir(path[, options], callback) 建立文件目录

fs.mkdir(path.join(__dirname, 'abc'), function(err){
  console.log(err);
});

实行結果:转化成了abc文件目录

 

 

fs.readdir(path[, options], callback) 载入文件目录

var path = require('path');
var fs = require('fs');
fs.readdir(__dirname, function(err, files){
  console.log(files);
  files.forEach(function(item, index){
    // 获得文档信息内容
    fs.stat(path.join(__dirname, item), function(err, stat){
      // 分辨是不是为文档
      if(stat.isFile()){
        console.log(item, '文档');
      } else if(stat.isDirectory()){ // 分辨是不是为文件目录
        console.log(item, '文件目录');
      }
    });
  });
});

实行結果:

fs.rmdir(path[, options], callback) 删除目录

fs.rmdir(path.join(__dirname, 'abc'), function(err){
  console.log(err);
});

 

评论(0条)

刀客源码 游客评论