Node模块之fs模块(六)

Java大拿 2017-12-15 17:01:52 ⋅ 861 阅读

屏幕快照 2017-08-08 上午10.53.21.png

第一部分 概述

Node.js 提供一组类似UNIX(POSIX)标准的文件操作API,Node.js中操作文件的模块是fs(File System)模块,文件系统模块中的方法均有异步和同步版本。利用fs模块,可以查询文件的统计信息、打开关闭文件、读写文件等。

异步方法最后一个参数都是回调函数,这个回调的参数取决于方法,不过第一个参数一般都是异常。如果操作成功,那么第一个参数就是 null 或 undefined。

第二部分 实例
2.1读取文件

2.1.1 异步方法为: fs.readFile(file[, options], callback)

file: 文件路径;
options: encoding默认为空, 读写操作默认为'r';
callback: 回调函数

实例代码为

//引用fs模块
var fs = require('fs');
//异步读取, 填写必要的参数
fs.readFile('./hello.txt', 'utf-8', function(err, data){
    if(err) throw err;
    console.log(data);
});

2.1.2 同步方法为: fs.readFileSync(file[, options]), 返回的是文件本身

file: 文件路径;
options: encoding默认为空, 读写操作默认为'r';

实例代码为

var fs = require('fs');
var content = fs.readFileSync('./hello.txt', 'utf-8');
console.log(content);
2.2写入文件

2.2.1 语法为fs.writeFile(file, data[, options], callback)

file: 文件或路径;
data: 写入内容;
options: 1.encoding默认为utf-8, mode默认为0o666, flga默认为'w';
callback: 回调函数;

实例代码为:

var fs = require('fs');
fs.writeFile('./writeOne', 'node fs module', function(err, data){
    if(err) throw err;
    console.log('写入成功');
});

2.2.2 同步写入 fs.writeFileSync(file, data[, options])

file: 文件或路径;
data: 写入内容;
options: 1.encoding默认为utf-8, mode默认为0o666, flga默认为'w';

实例代码:

var fs = require('fs');
fs.writeFileSync('./syncFile.txt', 'sync file');
2.3 监听文件

语法: fs.unwatchFile(filename[, listener])
watchfile方法监听一个文件,如果该文件发生变化,就会自动触发回调函数。
语法类似之前的listener,

var fs = require('fs');
//监听watch文件, 并打印时间
fs.watchFile('./watch.txt', function (curr, prev) {
  console.log('当前时间时间: ' + curr.mtime);
  console.log('上次保存时间: ' + prev.mtime);
});

fs.writeFile('./watch.txt', "写入文字", function (err) {
  if (err) throw err;

  console.log("文件写入完成");   
});

停止监听为 fs.unwatchFile(filename[, listener])

2.4 删除文件

fs.unlink(path[,callback])

不在使用的文件可以用fs.unlink()方法进行删除,删除前应使用fs.exists()方法检查文件是否存在,fs.unlinkSync()是其同步版本.

var fs = require('fs');
var path = require('path');

var file = path.join(__dirname, './dele.js');

if(fs.existsSync(file)){

    fs.unlink(file, function(err){
    if(err){
        console.log(err);
    }
    
    })  
}
2.4 创建目录

2.4.1 异步操作fs.mkdir(path[, mode])

path: 路径;
mode: 权限;
callback: 回调函数.

权限问题

一共有十位数,其中:
   最前面那个 - 代表的是类型
   接着三个    rw- 代表的是所有者(user)拥有的权限
  然后那三个 r-- 代表的是组群(group)拥有的权限
  最后那三个 r-- 代表的是其他人(other)拥有的权限
-rwxrwxrwx (777) — 每个人都能够读取、写入、和执行.

代码实例:

var fs = require('fs');
fs.mkdirSync('./File', 0777, function(err){
    if(err) throw err;
    console.log('创建目录成功');
});

2.4.2 同步操作fs.mkdirSync(path[, mode])

path: 路径;
mode: 权限;

实例代码

var fs = require('fs');
fs.mkdirSync('./File1', 0777);
2.4 读取所有的目录与信息

2.4.1 readdir方法用于读取目录,返回一个所包含的文件和子目录的数组。
语法: fs.readdir(path[, options], callback)

fs.stat()方法用于查询文件信息,可以用于查询文件的大小、创建时间、权限等相关信息。fs.stat()是异步方法,

var fs = require('fs');

fs.stat('./text.txt', function (err, stats) {
    console.log(stats);
    //是否是文件
    console.log(stats.isFile()); 
    //是否是目录
    console.log(stats. isDirectory());
})

读取所有的文件目录与信息

fs.readdir('/Users/hhw/Desktop/', function (err, files) {
  if (err) throw err;

  files.forEach( function (file) {
    fs.stat('/Users/hhw/Desktop/' + file, function (err, stats) {
      if (err) throw err;

      if (stats.isFile()) {
        console.log("%s is file", file);
      }
      else if (stats.isDirectory ()) {
      console.log("%s is a directory", file);
      }
    console.log('stats:  %s',JSON.stringify(stats));
    });
  });
});
2.6 目录的读取、创建、删除、重命名(移动)
var fs = require('fs');
var path = require('path')
//读取目录夹内容
fs.readdir('./', function(err, files){
    if(err)console.log(err);
    console.log(files);
})  
//目录创建
fs.mkdir(path.join(__dirname, './test'), function(err){
    if(err) console.log(err);
})
//目录删除
fs.rmdir(path.join(__dirname, './test'), function(err){
    if(err) console.log(err);
})
//目录重命名[新路径、旧路径、回调函数]
fs.rename(path.join(__dirname, './test.js'), './demo.js', function(err){
    if(err) console.log(err);
})


                                         



全部评论: 0

    我有话说:

    Node模块Events模块(五)

    Node模块Events模块(五)

    Node 模块 util URL queryString path(八)

    第一部分 util util是一个Node.js核心模块,util模块设计的主要目的是为了满足Node内部API的需求。其中包括:格式化字符串、对象的序列化、实现对象继承等常用方法。要使用util

    Node模块(四)

    模块化分工、各司其职

    Node实战篇:Express--jade模板引擎(七)

    Jade(Pug) — Node Template Engine,一个高性能的模板引擎,专为 Node 而做......

    「轻阅读」聊一聊6种常用的架构设计模式(上)

      许多现代应用都需要在企业级规模上进行构建,有时甚至需要在互联网规模上进行构建。这些应用都需要满足可扩展性、可用性、安全性、可靠性和弹性需求。 在本文中,我将谈论一些设计模式,这些模式

    Node实战篇:使用joi来验证数据模型 (十)

    Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,本文就是介绍如何优雅地使用 joi 对数据进行校验......

    Node实战篇:Express 中间件-body-parser(五)

    body-parser是什么?body-parser是一个HTTP请求体解析中间件,使用这个模块可以解析JS

    Node异步式I/O和异步式编程(三)

     Node.js 最大的特点就是异步式 I/O(或者非阻塞I/O)与事件紧密结合的编程模式。 第一部分: I/O 1.阻塞I/O与非阻塞I/O概念 1.1阻塞I/O(同步I/O) 线程在

    Node实战篇:阶段项目(九)

    项目整体预览 项目的github地址 界面逼格还行-_- 主要功能: 登陆; 退出; 所用的主要模块: express, 路由.静态文件.模块分工等; express-session, 采用

    Node实战篇:Express 中间件 cookie-parser()

    cookieParser()实际上是对http传入的cookie进行解析后赋值给req.cookies,使得中间件可用

    Nodejs视频服务器 切片ffmpeg

    Node 视频服务器 切片ffmpeg

    运维监控软件 wgcloud 更新,v3.2.7 重构告警模块

    WGCLOUD,server端基于springboot开发,agent端使用go编写。支持高并发高性能,核心模块包括:服务器集群监控,ES集群状态监控,CPU监控,内存监控,数据监控,docker

    Nodejs实用技巧-Exceljs

    今天我们就在此介绍下exceljs的基本使用,应该可以满足我们大部分的需求。

    Nodejs神兽--Promise

    言必信,行必果。 没毛病,这就是Promise!

    SQL 模板神器

    SqlTemplate - MyBatis SqlTemplate - MyBatis 是sql模板引擎,主要解决动态拼接sql字符串 。原理是比较简单,把模板内容构建成完成的xml,这样

    Node实战篇:Express-session解析(八)

    Session和HTTP协议属于不同层面的事物,HTTP属于ISO七层模型的最高层应用层,前者Session不属于后者,前者HTTP是具体的动态页面技术来实现的,但同时它又是基于后者的。

    Node实战篇:Express路由(三)

    Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

    2018年8个技巧来构建更好的Node.js应用程序

    2018年8个技巧来构建更好的Node.js应用程序