屏幕快照 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);
})
注意:本文归作者所有,未经作者允许,不得转载