Node.js 操作文件系统

> 文件读写
完整读取一个文件时,可用readFile方法或readFileSync:

fs.readFile(filename, [options], callback)

var fs = require('fs');
fs.readFile('./t.txt', function(err, data){
	if(err) console.log("读文件发送错误")
	slse console.log(data);
});

注意,如果没有指定options,那么data就是二进制数据(Buffer对象,可调用toString()方法获取字符串),options设置:

flag		r, r+, w, w+, a, a+
encoding	utf8, ascii, base64

在options参数值中,可使用encoding属性指定使用何种编码格式来读取该文件,过程就是读取文件,然后转换成指定编码后存入Buffer对象,否则就是直接读取文件的原始二进制内容。如果在readFile函数中使用options参数并将encoding属性值指定为某种编码格式,则回调函数中的第二个参数值返回将文件内容根据指定编码格式进行编码后的字符串。

在使用同步方式读取文件时,使用readFileSync方法:

var data=fs.readFileSync(filename, [options])

在完整写入一个文件时,我们可以使用fs模块中的writeFile方法或writeFileSync方法:

fs.writeFile(filename,data,[options],callback)
fs.writeFileSync(filename,data, [options]);

var fs = require('fs');
fs.writeFile('./t.txt', "数据", function(err){
	if(err) console.log("写文件失败");
	else console.log("写文件成功");
});

// 向文件追加数据
var fs = require('fs');
fs.writeFile('./t.txt', "追加数据", {flag:'a'}, function(err){
	if(err) console.log("写文件失败");
	else console.log("写文件成功");
});

// base64读入图片,base64解码数据写入图片
// 读入的data是一个Buffer对象,toString后就是base64字符串
// 然后写文件时,指定base64解码字符串(得到二进制数据)
var fs=require('fs');
fs.readFile('./a.gif','base64',function(err,data){
	fs.writeFile('./b.gif',data.toString(), "base64", function(err){});
});

产生data可以是字符串也可以是一个Buffer对象。options设置:

flat		默认为w
mode		文件权限,默认0666
encoding	指定使用何种编码来写入文件,data是Buffer时被忽略

将一个字符串或一个缓存区中的数据追加到一个文件底部时,我们可以使用fs模块中的appendFile方法或appendFileSync方法。

>从指定位置开始读写文件

fs.open(filename, flags,[mode],callback)
fs.openSync(filename, flags,[mode])

//回调函数第二参数为打开的文件描述符
var fs=require('fs');
fs.open('./t.txt', 'r', function(err,fd) {

});

// 取到文件描述符后,使用read读取
fs.read(fd, buffer, offset, length, position, callback)

> 创建与读取目录

// mode默认为0777
fs.mkdir(path, [mode], callback);

// 读取目录,files是一个数组
var fs = require('fs');
fs.readdir('D:/', function(err, files){
    console.log(files);
});

> 查看文件或目录的信息

// 当查看连接文件时,必须使用lstat
fs.stat(path,callback);
fs.lstat(path, callback);

// stats是一个fs.Stats对象,有一系列方法和属性
// 比如是isFile isDirectory
fs.stat('./t.txt', function(err, stats){

});

在使用open方法或openSync方法打开文件并返回文件描述符后,可以使用fs模块中的fstat方法查询被打开的文件信息。

> 检查文件或目录是否存在

fs.exists(path, function(exists){});

> 获取文件或目录的绝对路径

fs.realpath(path, function(err, resolvedPath){});

> 修改文件访问时间及修改时间

fs.utime(path, atime, mtime, function(err){});
fs.utime(path, new Date(), new Date(), function(err){});

在使用open方法或openSync方法打开文件并返回文件描述符后,可以使用fs模块中的futimes方法修改文件的访问时间或修改时间。

> 修改文件或目录的读写权限

fs.chmod('./t.txt', 06000, function(err){});

> 文件或目录的其它操作

fs.rename(oldPath,newPath,callback)
fs.link(srcpath,dstpath,callback)
fs.unlink(path,callback)
fs.symlink(srcpath,dstpath,[type],callback)
fs.truncate(filename,len,callback)
fs.rmdir(path,callback)
fs.watchFile('./message.txt',function(curr, prev) {})