nodejs模块——fs模块

fs模块用于对系统文件及目录进行读写操作。

一、同步和异步

使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式。

异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined。

异步写法demo:有一个回调函数。

var fs = require('fs'); // 载入fs模块

fs.unlink('/tmp/shiyanlou', function(err) {
    if (err) {
        throw err;
    }
    console.log('成功删除了 /tmp/shiyanlou');
});

同步写法demo:

var fs = require('fs');

fs.unlinkSync('/tmp/shiyanlou'); // Sync 表示是同步方法
console.log('成功删除了 /tmp/shiyanlou');

同步方法执行完并返回结果后,才能执行后续的代码。而异步方法采用回调函数接收返回结果,可以立即执行后续代码。

二、readFile读取文件

fs.readFile(filename,[option],callback) 方法读取文件。

参数说明:

  • filename String 文件名
  • option Object
    • encoding String |null default=null
    • flag String default='r'
  • callback Function

demo

有一个文本文件text.txt内容如下

line one
line two

和text.txt相同目录中有一个readfile.js,内容如下

readFile的回调函数接收两个参数,err是读取文件出错时触发的错误对象,data是从文件读取的数据。

var fs = require('fs'); // 引入fs模块

fs.readFile('./test.txt', function(err, data) {
    // 读取文件失败/错误
    if (err) {
        throw err;
    }
    // 读取文件成功
    console.log(data);
});

$ node readfile.js运行结果

<Buffer 6c 69 6e 65 20 6f 6e 65 0a 6c 69 6e 65 20 74 77 6f 0a>

这是原始二进制数据在缓冲区中的内容。

要显示文件内容可以使用toString()或者设置输出编码。

toString()写法:

// 使用toString()
fs.readFile('./test.txt', function(err, data) {
    // 读取文件失败/错误
    if (err) {
        throw err;
    }
    // 读取文件成功
    console.log(data.toString());
});

设置utf-8编码写法:

// 设置编码格式
fs.readFile('./test.txt', 'utf-8', function(err, data) {
    // 读取文件失败/错误
    if (err) {
        throw err;
    }
    // 读取文件成功
    console.log('utf-8: ', data.toString());
});

readFile同步的写法就是没有回调函数:fs.readFileSync(filename,[options])。

三、WriteFile写入文件

使用fs.writeFile(filename,data,[options],callback)写入内容到文件。

参数说明:

  • filename String 文件名
  • data String|buffer
  • option Object
    • encoding String |nulldefault='utf-8'
    • mode Number default=438(aka 0666 in Octal)
    • flag Stringdefault='w'
  • callback Function

demo

var fs = require('fs'); // 引入fs模块

// 写入文件内容(如果文件不存在会创建一个文件)
// 写入时会先清空文件
fs.writeFile('./test2.txt', 'test test', function(err) {
    if (err) {
        throw err;
    }

    console.log('Saved.');

    // 写入成功后读取测试
    fs.readFile('./test2.txt', 'utf-8', function(err, data) {
        if (err) {
            throw err;
        }
        console.log(data);
    });
});

因为默认flag='w'是写,会清空文件,想要追加,可以传递一个flag参数,如下。

var fs = require('fs'); // 引入fs模块

// 写入文件内容(如果文件不存在会创建一个文件)
// 传递了追加参数 { 'flag': 'a' }
fs.writeFile('./test2.txt', 'test test', { 'flag': 'a' }, function(err) {
    if (err) {
        throw err;
    }

    console.log('Saved.');

    // 写入成功后读取测试
    fs.readFile('./test2.txt', 'utf-8', function(err, data) {
        if (err) {
            throw err;
        }
        console.log(data);
    });
});

flag传值,r代表读取文件,w代表写文件,a代表追加。

四、使用fs.read和fs.write读写文件

fs.read和fs.write功能类似fs.readFile和fs.writeFile(),但提供更底层的操作,实际应用中多用fs.readFile和fs.writeFile。

使用fs.read和fs.write读写文件需要使用fs.open打开文件和fs.close关闭文件。

1、fs.read()

先介绍fs.open。

fs.open(path,flags,[mode],callback)方法用于打开文件,以便fs.read()读取。

参数说明:

  • path 文件路径
  • flags打开文件的方式
  • [mode] 是文件的权限(可行参数,默认值是0666)
  • callback 回调函数

flags值及说明如下

r :读取文件,文件不存在时报错;
r+ :读取并写入文件,文件不存在时报错;
rs :以同步方式读取文件,文件不存在时报错;
rs+ :以同步方式读取并写入文件,文件不存在时报错;
w :写入文件,文件不存在则创建,存在则清空;
wx :和w一样,但是文件存在时会报错;
w+ :读取并写入文件,文件不存在则创建,存在则清空;
wx+ :和w+一样,但是文件存在时会报错;
a :以追加方式写入文件,文件不存在则创建;
ax :和a一样,但是文件存在时会报错;
a+ :读取并追加写入文件,文件不存在则创建;
ax+ :和a+一样,但是文件存在时会报错。

fs.close(fd,[callback])

用于关闭文件,fd是所打开文件的文件描述符。

fs.read(fd,buffer,offset,length,position,callback)接收6个参数。

参数说明:

  • fd 文件描述符,必须接收fs.open()方法中的回调函数返回的第二个参数。
  • buffer 是存放读取到的数据的Buffer对象。
  • offset 指定 向buffer中存放数据的起始位置
  • length 指定 读取文件中数据的字节数
  • position 指定 在文件中读取文件内容的起始位置
  • callback 回调函数,参数如下
    • err 用于抛出异常
    • bytesRead 从文件中读取内容的实际字节数
    • buffer 被读取的缓存区对象。

demo: read.js内容如下

var fs = require('fs'); // 引入fs模块

// 打开文件
fs.open('./testread.txt', 'r', function(err, fd) {
    if (err) {
        throw err;
    }
    console.log('open file success.');
    var buffer = new Buffer(255);
    // 读取文件
    fs.read(fd, buffer, 0, 10, 0, function(err, bytesRead, buffer) {
        if (err) {
            throw err;
        }
        // 打印出buffer中存入的数据
        console.log(bytesRead, buffer.slice(0, bytesRead).toString());

        // 关闭文件
        fs.close(fd);
    });
});

运行结果

 

2、fs.write()

fs.read(fd,buffer,offset,length[,position],callback(err,bytesWritten,buffer))接收6个参数。

参数说明:

  • fd 文件描述符,必须接收fs.open()方法中的回调函数返回的第二个参数。
  • buffer 是存放 将被写入的数据,buffer尺寸的大小设置最好是8的倍数,效率较高。
  • offset  buffer写入的偏移量
  • length (integer)指定 写入文件中数据的字节数
  • position (integer) 指定 在写入文件内容的起始位置
  • callback 回调函数,参数如下
    • err 用于抛出异常
    • bytesWritten从文件中读取内容的实际字节数
    • buffer 被读取的缓存区对象。

var fs = require('fs'); // 引入fs模块

// 打开文件
fs.open('./testwrite.txt', `w`, function(err, fd) {
    if (err) {
        throw err;
    }
    console.log('open file success.');
    var buffer = new Buffer('shiyanlou');
    // 读取文件
    fs.write(fd, buffer, 0, 6, 0, function(err, bytesWritten, buffer) {
        if (err) {
            throw err;
        }

        console.log('write success.');
        // 打印出buffer中存入的数据
        console.log(bytesWritten, buffer.slice(0, bytesWritten).toString());

        // 关闭文件
        fs.close(fd);
    });
});

运行结果如下:

 

五、目录操作

1、创建目录

使用fs.mkdir(path,[mode],callback)创建目录,path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数。

demo:mkdir.js内容如下

var fs = require('fs'); // 引入fs模块

// 创建 newdir 目录
fs.mkdir('./newdir', function(err) {
    if (err) {
        throw err;
    }
    console.log('make dir success.');
});

删除目录可以用fs.rmdir(path,callback);但是只能删除空目录。

2、读取目录

使用fs.readdir(path,callback)读取文件目录。

demo:readdir.js内容如下

var fs = require('fs'); // 引入fs模块

fs.readdir('./newdir', function(err, files) {
    if (err) {
        throw err;
    }
    // files是一个数组
    // 每个元素是此目录下的文件或文件夹的名称
    console.log(files);
});

结果输出该目录有哪些目录和文件。

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/5038300.html有问题欢迎与我讨论,共同进步。

时间: 2024-11-02 20:04:25

nodejs模块——fs模块的相关文章

nodejs——网络编程模块

net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法.dgram模块用于UDP网络编程. 参考链接:https://nodejs.org/api/net.html, https://nodejs.org/api/dgram.html 一.TCP Server net模块通过net.createServer方法创建TCP服务器,通过net.connect方法创建客户端去连接服务器. 1.通过net模块创建一个TCP Server // server.js var

NodeJS中的模块是单例的吗?

本文翻译自 Lazlojuly 的 are-node-js-modules-singletons. 本文从属于笔者的NodeJS入门与最佳实践中的NodeJS 基础系列文章,包括NodeJS 入门.NodeJS 模块导出与解析.NodeJS IOStream.NodeJS HTTPS这几部分. 笔者之前在使用require导入模块时,特别是在导入有状态的模块时,笔者会考虑其是否在多次导入情况下依然保持单例特性,或者说对于同一个文件在不同路径下导入时,是否能够识别为一致?本文即是对该特性进行解析.

nodejs的require模块(文件模块/核心模块)及路径介绍_基础知识

在nodejs中,模块大概可以分为核心模块和文件模块. 核心模块是被编译成二进制代码,引用的时候只需require表示符即可,如(require('net')). 文件模块,则是指js文件.json文件或者是.node文件.在引用文件模块的时候后要加上文件的路径:/.../.../xxx.js表示绝对路径../xxx.js表示相对路径(同一文件夹下的xxx.js),../表示上一级目录.如果既不加/.../.../又不加./的话,则该模块要么是核心模块,要么是从一个node_modules文件夹

Python创建模块及模块导入的方法

  本文实例讲述了Python创建模块及模块导入的方法.分享给大家供大家参考.具体分析如下: python学习手册中写道: 定义模块,只要使用文本编辑器,把一些python代码输入到文本中,然后以.py为后缀名进行保存,任何此类文件都会被认为是python模块. 比如说,下面的代码输入到一个文件中,就可以看作是一个模块: ? 1 2 3 4 def printme(var): print var if __name__ == '__main__': printme(1) 假设说输入到a.py中,

接口-RBAC问题 ,根据角色查出模块,在根据模块查出模块类型

问题描述 RBAC问题 ,根据角色查出模块,在根据模块查出模块类型 1, 根据角色,查询出角色可以操作的模块列表 2. 根据模块列表查询总共有多少种类型,并返回其列表 接口:List queryMoudleTypeList(int roleId): 怎么实现?

Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问这个类不存在的方法,那么它会去访问"魔术方法__call()" 用户访问一个不存在的操作->解决:给每个控制器都定义个_empty()方法来处理   第二个解决方法:定义一个空操作 [空模块处理] 我们使用一个类,但是现在这个类还没有被include进来. 我们可以通过自动加载机制处

nodejs文件操作模块FS(File System)常用函数简明总结_node.js

件系统操作相关的函数挺多的.首先可以分为两大类. 一类是异步+回调的. 一类是同步的. 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1. 首先是一类最常规的读写函数,函数名称和形式,应该是起源于C语言的. 复制代码 代码如下: fs.open(文件路径,读写标识,[文件mode值,666],回调函数(err,文件句柄fd));          fs.read(文件句柄fd,被写入的buffer,offset,length,position,回调函数(err, byte

nodejs模块——Event模块

Node.js中,很多对象会发出事件.如,fs.readStream打开文件时会发出一个事件.  所有发出事件的对象都是events.EventEmitter的实例,可以通过require("event");获得event模块. 监听器函数(listeners)可以添加给对象,对象发出事件时,对应的函数就会被执行.在监听器函数中,this引用的是它(监听器函数) 一.Class:events.EventEmitter 通过require('events').EventEmitter得到

nodejs下打包模块archiver详解_node.js

archiver是一个在nodejs中能跨平台实现打包功能的模块,可以打zip和tar包,是一个比较好用的三方模块. 使用前先安装archiver模块. 复制代码 代码如下: npm install archiver 建立一段代码 复制代码 代码如下: var archiver = require('archiver'); var fs = require('fs'); //被打包文件 var files = [   'files/001.png',   'files/002.png'   ];