1、同步和异步
使用require('fs')载入fs模块,模块中全部方法都有同步和异步两种形式。
异步方法中回调函数的第一个参数老是留给异常参数(exception),若是方法成功完成,该参数为null或undefined。
异步写法demo:有一个回调函数。node
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');
同步方法执行完并返回结果后,才能执行后续的代码。而异步方法采用回调函数接收返回结果,能够当即执行后续代码。
2、readFile读取文件
fs.readFile(filename,[option],callback) 方法读取文件。缓存
参数说明:异步
option Object函数
- encoding String |null default=null - flag String default='r'
demo
有一个文本文件text.txt内容以下测试
line one line two
和text.txt相同目录中有一个readfile.js,内容以下
readFile的回调函数接收两个参数,err是读取文件出错时触发的错误对象,data是从文件读取的数据。ui
var fs = require('fs'); // 引入fs模块 fs.readFile('./test.txt', function(err, data) { // 读取文件失败/错误 if (err) { throw err; } // 读取文件成功 console.log(data); });
$ node readfile.js运行结果编码
// 使用toString() fs.readFile('./test.txt', function(err, data) { // 读取文件失败/错误 if (err) { throw err; } // 读取文件成功 console.log(data.toString()); });
设置utf-8编码写法:spa
// 设置编码格式 fs.readFile('./test.txt', 'utf-8', function(err, data) { // 读取文件失败/错误 if (err) { throw err; } // 读取文件成功 console.log('utf-8: ', data.toString()); //直接用console.log(data);也能够 });
readFile同步的写法就是没有回调函数:fs.readFileSync(filename,[options])。
3、WriteFile写入文件
使用fs.writeFile(filename,data,[options],callback)写入内容到文件。code
参数说明:
option Object
- encoding String |nulldefault='utf-8' - mode Number default=438(aka 0666 in Octal) - flag Stringdefault='w'
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表明追加。
4、使用fs.read和fs.write读写文件
fs.read和fs.write功能相似fs.readFile和fs.writeFile(),但提供更底层的操做,实际应用中多用fs.readFile和fs.writeFile。
使用fs.read和fs.write读写文件须要使用fs.open打开文件和fs.close关闭文件。
一、fs.read()
先介绍fs.open。
fs.open(path,flags,[mode],callback)方法用于打开文件,以便fs.read()读取。
参数说明:
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个参数。
参数说明:
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); }); });
运行结果
二、fs.write()
fs.read(fd,buffer,offset,length[,position],callback(err,bytesWritten,buffer))接收6个参数。
参数说明:
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); }); });
运行结果以下:
5、目录操做
一、建立目录
使用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);可是只能删除空目录。
二、读取目录
使用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); });
结果输出该目录有哪些目录和文件。