文件系统
var fs = require('fs');
//input.txt内容ABC
//异步读取
fs.readFile('input.txt',function(err,data){ //回调函数,有点奇葩,data在第二个参数
if(err){
return console.error(err);
}
console.log('异步读取' + data.toString());
});
//同步读取
var data = fs.readFileSync('input.txt'); //同步的时侯fs.readFileSync(input.txt).toString()方法调出data里面的数据
console.log('同步读取' + data.toString());
console.log('程序执行完毕')
//结果:
同步读取: ABC
程序执行完毕。
异步读取: ABC
推荐异步读取,性能更高,速度更快,没有阻塞
打开文件
fs.open(path,flags,mode,callback)
path:文件路径
flags:解读:
r:读取模式,文件不存在抛出异常
r+:读写模式,文件不存在抛出异常
rs:同步读取文件
fs+:同步读写文件
w:写入模式打开文件,文件不存在则创建(真任性)
wx:与x同,但是如果文件存在,则会写入失败
w+:读写打开文件,文件不催在则创建
wx+:类似w+,文件存在,则读写失败
a:追加模式,文件不存在则创建
ax:如果文件存在,文件追加失败
a+:以读取加追加模式打开文件,文件不在则创建
ax+:如果文件存在则追加失败
mode:设置文件模式(权限),文件创建默认权限为0666(可读可写)
var fs = require('fs');
//异步打开文件
console.log('准备打开文件!');
fs.open('input.txt','r+',function(err,fd){
if(err){
return console.error(err);
}
console.log('文件打开成功!');
});
获取文件信息
//fs.stat(path,callback)
var fs = require('fs');
fs.stas('example.js',function(err,stas){
console.log(stats.isFile()); //true
console.log(stas); //{ dev: 16777220,
mode: 33188,
nlink: 1,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4096,
ino: 40333161,
size: 61,
blocks: 8,
atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST),
mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST),
ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST) }
})
还有很多类似isFile()的函数,可以查查文档
写入文件
fs.writeFile(file,data,option,callback)
data:可以是String或者Buffer对象
option:是一个对象,包括{encoding,mode,flag},默认encoding为utf8,模式0666,flag为“w”
var fs = require('fs');
console.log('准备写入');
fs.writeFile('input.txt','你好吗',function(err){
if(err){
return console.error(err);
}
console.log('数据写入成功');
console.log('尝试读入');
fs.readFile('input.txt',function(err,data){
if(err)
return console.error(err);
console.log('异步读取数据' + data.toString());
});
});
从文件中调取文件到缓冲区
fs.read(fd,buffer,offset,length,position,callback)
fd:通过fs.open()方法返回的文件描述符,意味着read必定open,让read知道自己在读什么文件
buffer:数据写入的缓冲区
offset:缓冲区写入的写入的偏移量
position:文件起始位置,若null,则从当前文件指针的位置读取
callback:回调函数,err:错误信息,bytesRead:读取的字节数,buffer:缓冲区对象
//input.txt,内容:你好
var fs = require('fs')'
var buf = new Buffer.alloc(1024);
console.log('准备打开已存在的文件') ;
fs.open('input.txt','r+',function(err,fd){
if(err){
return console.error(err);
}
console.log('文件打开成功');
console.log('准备读取文件');
fs.read(fd,buf,0,buf.length,0,function(err,bytes){
if(err){
console.log(err);
}
console.log(bytes + ' 字节被读取');
if(bytes > 0){
console.log(buf.slice(0,bytes).toString());
}
//顺便关闭文件
fs.close(fd,function(err){
if(err){
console.log(err);
}
console.log('文件关闭成功')
});
});
});
删除文件
var fs = require('fs');
console.log('准备删除文件');
fs.unlink('input.txt',function(err){
if(err){
return console.error(err);
}
console.log('文件删除成功')
})
创建目录
var fs = require('fs');
fs.mkdir('/tmp/test/',function(err){
if(err)
return console.error(err);
console.log('目录创建成功');
})
//fs.mkdir(path,mode,callback) //mode默认不填为0777
读取目录
var fs = require('fs');
fs.readdir('/tmp/',function(err,files){
if(err){
return console.error(err);
}
files.forEach(function(file){
console.log(file)
});
})