[toc]
NodeJS 文件系统[fs 模块]
1.NodeJS 文件系统
NodeJS 文件系统被封装在fs模块中,它提供了文件的读取,写入,更名,删除,遍历目录,链接等文件系统的操作。
和其他模块不同的是,fs模块提供了异步和同步两个版本;例如读取文件内容的函数有异步fs.readFile()和同步函数fs.readFileSync()。
2.文件读取
2.1异步读取文件方法
fs.readFile(filename,[encoding],[callback(err,data)])
- filename(必选),读取的文件名称(文件路径)
- encoding(可选),表示文件的字符编码
- callback 回调函数,用于接收文件的内容
// router.js
var fs=require('fs');//引入fs模块
module.export={
'/a.html':function(req,res){
// 同步读取文件
fs.readFile('./public/a.html','utf-8',function(err,data){
if(err){
console.error(err);
}else{
res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
res.write(data);
res.end();
}
})
}
}
// server.js
var http=require('http');
var router=require('./router');
function onRequest(req,res){
if(req.url!=='/favicon.ico'){
router[req.url](req,res);
}
}
var webServer=http.createServer(onRquest);
webServer.listen(3000,function(){
console.log('server is running,port is 3000');
})
2.2同步读取文件
fs.readFileSync(filename,[encoding])
- filename(必选),读取的文件名称(文件路径)
- encoding(可选),表示文件的字符编码
3.文件写入
3.1异步写入文件方法
fs.writeFile(filename,data,[encoding],[callback(err)])
- filename(必选),读取的文件名称(文件路径)
- data(必选),要写入文件的数据
- encoding(可选),表示文件的字符编码
- callback 回调函数,接收错误信息
// router.js
var fs=require('fs');//引入fs模块
module.exports={
'/b.html':function(req,res){
// 异步写入文件
fs.writeFile('./public/b.txt', "mmmmmmmmmm", 'utf-8', function (err) {
if (err) {
console.error(err);
}
//写入后异步读取
fs.readFile('./public/b.txt', 'utf-8', function (err, data) {
if (err) {
console.error(err);
} else {
res.writeHead(200, { "content-type": "text/html;charset=utf-8" });
res.write(data);
res.end();
}
})
})
}
// server.js
var http=require('http');
var router=require('./router');
function onRequest(req,res){
if(req.url!=='/favicon.ico'){
router[req.url](req,res);
}
}
var webServer=http.createServer(onRequest);
webServer.listen(3000,function(){
console.log('server is running,port is 3000');
})
3.2同步写入文件方法
fs.writeFileSync(filename,data,[encoding])
- filename(必选),读取的文件名称(文件路径)
- data(必选),要写入文件的数据
- encoding(可选),表示文件的字符编码
// server.js
var http = require('http');
var router = require('./router');
function onRequest(req, res) {
if (req.url !== '/favicon.ico') {
router[req.url](req, res);
}
}
var webServer = http.createServer(onRequest);
webServer.listen(3000, function () {
console.log('server is running,port is 3000');
})
// router.js
var fs = require('fs');//引入fs模块
module.exports = {
'/b': function (req, res) {
// 同步写入文件
fs.writeFileSync('./public/b.txt', "你个哈皮", 'utf-8')
//写入后同步读取
var fileData = fs.readFileSync('./public/b.txt', 'utf-8');
res.writeHead(200, { "content-type": "text/html;charset=utf-8" });
res.write(fileData);
res.end();
},
}
4.文件删除
4.1异步删除文件方法
fs.unlink(filename,[callback(err)])
- filename(必选),读取的文件名称(文件路径)
- callback 回调函数,用于接收错误信息
// router.js
var fs = require('fs');//引入fs模块
module.exports = {
'/del.html':function(req,res){
fs.unlink('./public/b.txt',function(err){
if(err){
console.error(err)
}
//返回删除成功信息
res.writeHead(200, { "content-type": "text/html;charset=utf-8" });
res.write("文件删除成功");
res.end();
})
}
// server.js同上
}
4.2同步删除文件方法
fs.unlinkSync(filename])
- filename(必选),读取的文件名称(文件路径)
// router.js
var fs = require('fs');//引入fs模块
module.exports = {
'/del_.html':function(req,res){
fs.unlinkSync('./public/a.txt');
res.writeHead(200, { "content-type": "text/html;charset=utf-8" });
res.write("文件删除成功");
res.end();
}
// server.js同上
}