NodeJS语言同其它语言一样也提供了文件操作相关的API,我们通过文件系统做一些小实例,以此来对NodeJS有一个大致的了解。
NodeJS文件系统包含两大类的API方法,即异步文件操作和同步文件操作。
以下是常用的文件操作API:
新建一个lession_fs.js文件:
1.读取文件
var fs=require("fs");//首先引入需要的文件模块
/*异步读取*/
console.log("开始异步读取bookinfo.txt");
fs.readFile("bookinfo.txt",function(err,data)
{
if(err)
{
return console.error(err);
}
console.log("异步读取文件内容: " +data.toString());
});
/*同步读取*/
var buffer=fs.readFileSync("bookinfo.txt");
console.log("开始同步读取bookinfo.txt"+buffer);
打开cmd使用node执行lession_fs.js文件,命令: node lession_fs.js
(如果对开发环境搭建不是很清楚的请参考我的另一篇文章:https://www.jianshu.com/p/67bb37ff7db7)
你会发现"开始同步读取bookinfo.txt...."要优先于"开始异步读取bookinfo.txt"打印出来,这就是同步和异步读取文件的区别,异步读取有它自己的优势,关于NodeJS的异步IO之后我们会深入讲解。
2.打开文件并以字节方式读取文件
/*打开文件*/
//方法原型: fs.open(path, flags[, mode], callback)
fs.open("./lession_dir_temp/fs_write.txt","r",function(err,fd)
{
if (err) {
return console.error(err);
}
console.log("打开文件成功。");
var buf = new Buffer(1024);//分配缓冲区
//开始读取字节
//方法原型: fs.read(fd, buffer, offset, length, position, callback)
fs.read(fd,buf,0,buf.length,0,function(err,bytes)
{
if(err)
{
fs.closeSync(fd);//关闭文件
return console.log(err);
}
console.log("读取的字节长度:"+bytes);
// 仅输出读取的字节
if(bytes > 0){
console.log("打开文件后读取的buff内容:"+buf.slice(0, bytes).toString());
}
fs.closeSync(fd);//关闭文件
});
});
具体API参数请参考:http://www.runoob.com/nodejs/nodejs-fs.html查阅
3.创建目录、创建文件
/*创建目录*/
if(!fs.existsSync("./lession_dir_temp/fs_write.txt"))//判断要创建的文件是否存在
{
fs.mkdir("./lession_dir_temp",function(err)//异步创建目录
{
if (err) {
return console.error(err);
}
console.log("lession_dir_temp目录创建成功。");
/*写入文件*/
fs.writeFile("./lession_dir_temp/fs_write.txt","我是被写入的数据",function(err,)
{
if(err)
{
return console.error(err);
}
console.log("写入文件成功!");
});
});
}
4.删除文件、删除目录
/*删除文件(注意:删除目录前先删除文件)*/
fs.unlink("./lession_dir_temp/fs_write.txt",function(err)
{
if (err) {
return console.error(err);
}
console.log("/lession_dir_temp/fs_write.txt删除文件成功。");
/*删除目录*/
fs.rmdir("./lession_dir_temp/",function(err)
{
if (err) {
return console.error(err);
}
console.log("/lession_dir_temp删除目录成功。");
});
});
5.获取文件信息
/*获取文件信息*/
fs.stat("./lession_dir_temp/fs_write.txt", function (err, stats) {
if(err)
{
return console.log(err);
}
console.log(stats);
console.log("读取文件信息成功!");
// 检测文件类型
console.log("是否为文件(isFile) ? " + stats.isFile());
console.log("是否为目录(isDirectory) ? " + stats.isDirectory());
});
以上获取文件信息方法会打印如下:
Stats {
dev: 907620003,
mode: 33206,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: undefined,
ino: 11258999069215584,
size: 24,
blocks: undefined,
atimeMs: 1523370240515.4707,
mtimeMs: 1523370240535.473,
ctimeMs: 1523370240535.473,
birthtimeMs: 1523370240515.4707,
atime: 2018-04-10T14:24:00.515Z,
mtime: 2018-04-10T14:24:00.535Z,
ctime: 2018-04-10T14:24:00.535Z,
birthtime: 2018-04-10T14:24:00.515Z }
读取文件信息成功!
是否为文件(isFile) ? true
是否为目录(isDirectory) ? false
以上是NodeJS为我们提供的部分API使用示例展示,如果想了解更多请查阅 http://www.runoob.com/nodejs/nodejs-fs.html
接着我们使用NodeJS去完成一个小实例:《递归遍历你的某个磁盘目录》并对改目录下的所有文件进行按文件大小排序统计。
未完待续。。。
前期我们先零零散散的掌握一些NodeJS的基本使用,对它有个平缓的入门,慢慢深入学习并掌握它的工程化架构。每天进步一点点~~~