文件系统(File System)
文件系统简单来讲就是经过Node来操做系统中的文件
使用文件系统,须要先引入fs模块,fs是核心模块,直接引入 不须要下载
const fs = require('fs');
代码逐条执行,会阻塞
打开文件
fs.openSync(path, flags[, mode]);
flags 打开文件要作的操做的类型html
返回值:node
向文件中写入内容
fs.writeSync(fd, string[, position[, encoding]]);
保存而且关闭文件
fs.closeSync(fd);
//引入文件系统 const fs = require('fs'); //打开文件 var fd = fs.openSync('test.txt','w'); //向文件中写入内容 fs.writeSync(fd,'重返十七岁'); //关闭文件 fs.closeSync(fd);
代码会一块儿执行不会阻塞
打开文件
fs.open(path, flags[, mode], callback);api
异步调用的方法,结果都是经过回调函数的参数返回的数组
回调函数有两个参数:异步
写入文件
fs.write(fd, string[, position[, encoding]], callback);
关闭文件
fs.close(fd, callback);
//引入fs模块 const fs = require('fs'); //打开文件 fs.open('test.txt','w',function (err,fd) { //判断是否出错 if(!err){ // 写入文件 fs.write(fd,"这是异步写入的内容",function (err) { if(!err){ console.log('写入成功'); } //关闭文件 fs.close(fd, function (err) { if(!err){ console.log("文件已关闭"); } }); }); }else { console.log(err); } });
fs.writeFile(file, data[, options], callback);//异步
fs.writeFileSync(file, data[, options]);//同步
options 选项,能够对写入进行一些设置 (可选)函数
操做符(flag):性能
const fs = require('fs'); fs.writeFile('test.txt','经过writeFile写入的内容',{flag:"a"},function (err) { if(!err){ console.log("写入成功"); } });
同步,异步,简单文件的写入都不适合大文件的写入,性能较差,容易致使内存溢出,而流式文件写入会 一点一点的写入进去 不会致使内存溢出的情况学习
引入文件系统模块
var fs = require('fs');
建立一个可写流
fs.createWriteStream(path[, options]);
打开文件
var ws = fs.createWriteStream('hello3.txt');
监听流 可选
ws.once("open",function () { console.log("流打开了"); }); ws.once("close",function () { console.log("流关闭了"); });
on(事件字符串,回调函数)ui
once(事件字符串,回调函数)编码
经过ws向文件中输出内容
ws.write("经过可写流写入文件的内容1"); ws.write("经过可写流写入文件的内容2"); ws.write("经过可写流写入文件的内容3"); ws.write("经过可写流写入文件的内容4"); ws.write("经过可写流写入文件的内容5");
关闭流
ws.end();
fs.readFile(path[, options], callback); fs.readFileSync(path[, options]);
path 要读取文件的路径
callback 回调函数 经过回调函数将读取到的内容返回
var fs = require('fs'); fs.readFile('0.jpg',function (err,data) { if (!err) { // console.log(data); //将data写入文件中 fs.writeFile('hello.jpg',data,function (err) { if(!err){ console.log("文件写入成功"); } }) } });
流式文件读取也适用于一些比较大的文件,能够分屡次将文件读取到内存中
var fs = require('fs'); // 建立一个可读流 var rs = fs.createReadStream('0.jpg'); //建立一个可写流 var ws = fs.createWriteStream('test.jpg') // 监听流的开启和关闭 rs.once('open',function () { console.log("可读流打开了"); }); rs.once('close',function () { console.log("可读流关闭了"); //数据读取完毕,关闭可写流 ws.end(); }); ws.once('open',function () { console.log("可写流打开了"); }); ws.once('close',function () { console.log("可写流关闭了"); }); // 若是要读取可读流中的数据,必需要为可读流绑定一个data事件,data事件绑定完毕,他会自动开始读取数据 rs.on("data",function (data) { // console.log(data.length); //将读取到的数据写入到可写流中 ws.write(data); });
var fs = require('fs'); // 建立一个可读流 var rs = fs.createReadStream('0.jpg'); //建立一个可写流 var ws = fs.createWriteStream('test.jpg') // 监听流的开启和关闭 rs.once('open',function () { console.log("可读流打开了"); }); rs.once('close',function () { console.log("可读流关闭了"); }); ws.once('open',function () { console.log("可写流打开了"); }); ws.once('close',function () { console.log("可写流关闭了"); }); //pipe 能够将可读流中的内容,直接输出到可写流里面 rs.pipe(ws);
fs.existsSync(path);
例子
var isExists = fs.existsSync('test.jpg'); console.log(isExists);
fs.stat(path[, options], callback) fs.statSync(path[, options])
例子 官网
fs.stat('test.jpg',function (err,stats) { /** * size 文件的大小 * isFile() 是否 是一个文件 * isDirectory() 是否 是一个文件夹(目录) */ if(!err){ console.log(stats.isDirectory() ); } });
fs.unlink(path, callback) fs.unlinkSync(path)
例子
fs.unlinkSync("test.jpg");
fs.readdir(path[, options], callback) fs.readdirSync(path[, options])
例子
fs.readdir('.',function (err,files) { if(!err){ console.log(files); } });
fs.truncate(path[, len], callback) fs.truncateSync(path[, len])
例子
fs.truncateSync('test.txt',10);
fs.mkdir(path[, mode], callback) fs.mkdirSync(path[, mode])
例子
fs.mkdirSync("test");
fs.rmdir(path, callback) fs.rmdirSync(path)
例子
fs.rmdirSync("test");
fs.rename(oldPath, newPath, callback) fs.renameSync(oldPath, newPath)
参数
例子
fs.rename('test1.jpg','test2.jpg',function (err) { if (!err) { console.log('修改为功'); } });
fs.watchFile(filename[, options], listener)
参数
options 配置选项
listener 回调函数 当文件发生变化时 回调函数会执行
在回调函数中有两个参数
prev 修改前文件的状态
例子 官网
fs.watchFile('test.txt',{interval:1000},function (curr, prev) { console.log("修改前文件大小==>"+prev.size); console.log("修改后文件大小==>"+curr.size); });