Node.js文件系统(fs模块的使用)
Posted 橘猫吃不胖~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js文件系统(fs模块的使用)相关的知识,希望对你有一定的参考价值。
Node,js文件系统(fs模块的使用)
1 FS模块导入
Node实现文件I/O使用标准的POSIX函数的简单包装。Node文件系统(FS—FileSystem)模块可以使用以下语法输入:
var fs = require("fs");
2 同步、异步与回调
所有文件系统操作都具有同步和异步形式。供开发者选择
同步:程序在涉及到文件IO时,必须等到文件IO操作结束后再执行后续的操作。
异步:程序在涉及到文件IO时,不等待文件IO操作结束,继续执行后续的操作,当文件IO操作结束后系统会通知程序处理文件IO的结果。
回调函数:“回调”即“回头调用”;“回调函数”是指函数定义后并不立即调用,而是等到某个事件被触发时再调用,具有异步特性。
3 FS模块的常用函数
3.1 读文件
1、readFile():用于异步读取数据。(非阻塞方式读),语法为:
fs.readFile("filename", function (err, buffer)
// 处理文件的代码
);
“filename”:文件名(包含路径,可以是绝对路径,也可以是相对路径);
“function(err,buffer)”:回调函数,“err”存放的是读文件失败的信息;“buffer”存放文件的内容。
2、readFileSync():用于同步读取文件,返回一个字符串(文件内容)。(阻塞方式),语法为:
var text = fs.readFileSync("filename", "utf8");
“filename”:文件名(包含路径,可以是绝对路径,也可以是相对路径);
第二个参数:用来指定字符集,若不指定则函数返回Buffer,若指定则返回字符串。该参数可以是一个表示配置的对象,也可以是一个表示文本文件编码的字符串。默认的配置对象是 encoding: null, flag: 'r'
,即文件编码默认为null,读取模式默认为r(只读)。
示例代码:创建一个名为input.txt的文件,文件内容为“橘猫吃不胖”
//异步读取数据
fs.readFile("input.txt", function (err, buffer)
if (err) throw err;
console.log("异步读取:", buffer.toString());
)
console.log("程序结束");
本例中(异步读—非阻塞)程序不等待文件读取,它只是进行打印“程序结束”,同时程序无阻塞继续读取文件。
示例代码:
//同步读取文件
let data = fs.readFileSync("input.txt");
console.log("同步读取:", data.toString());
console.log("程序结束");
本例中(同步读—阻塞)直到它读取该文件,然后才前进到结束程序的地方。
3.2 打开文件
在异步模式下打开文件的语法是:
fs.open(path, flags[, mode], callback)
path:文件名(包含路径)
flags:打开文件的方式
mode:设置文件模式,但前提是已创建该文件。它默认为0666,读取和写入。
callback:回调函数,有两个参数(err, fd)。
flags参数的取值:
取值 | 描述 |
---|---|
r | 以只读方式打开文件,若文件不存在则报异常 |
r+ | 打开文件进行读取和写入,如果文件不存在发生异常 |
rs | 打开文件,用于读取,同步方式 |
rs+ | 打开文件进行读取和写入,告诉OS同步地打开它。 |
w | 打开文件进行写入,若文件不存在则创建文件,若文件存在则截断 |
wx | 类似w,如果路径存在则失败 |
w+ | 打开文件进行读取和写入,若该文件不存在则创建文件,若文件存在则截断 |
wx+ | 类似w+,但如果路径存在则失败 |
a | 向文件中追加内容,若文件不存在则创建文件 |
ax | 类似a,如果路径存在则失败 |
a+ | 打开文件进行读取和附加,如果文件不存在,则创建该文件 |
ax+ | 类似a+,如果路径不存在则失败 |
示例代码:
let fs = require("fs");
//异步——打开文件
fs.open("input.txt", "r+", function (err, fd)
if (err) throw err;
console.log("打开文件成功!");
)
console.log("------打开文件-----");
3.3 获取文件信息
获取文件信息:它产生一个对象,该对象包含了该文件或目录(文件夹)的具体信息。通过该方法,判断正在处理的是一个文件,还是一个目录。语法为:
fs.stat(path, callback);
path:文件名,包括路径字符串。
callback:回调函数得到两个参数(err, stats) 。err:打开文件异常时的信息;stats:文件的状态信息。
示例代码:
let fs = require("fs");
console.log("开始获取文件信息!");
fs.stat("input.txt", function (err, stats)
if (err) throw err;
console.log(stats);
console.log("获取文件信息成功!");
// 检查文件类型
console.log("是否为文件?", stats.isFile());
console.log("是否为目录?", stats.isDirectory());
)
3.4 写入文件
1、writeFile(异步写入文件),如果文件存在则会覆盖该文件,语法为:
fs.writeFile(filename, data[, options], callback);
filename:文件名,包括路径字符串
data:字符串或缓冲区将被写入到文件中
options:一个对象,用于指定编码格式。默认编码是UTF8。
callback:回调函数获取一个参数err,用于在发生任何写入错误时返回错误
示例代码:
let fs = require("fs");
console.log("开始写入文件!");
fs.writeFile("input.txt", "今天是个好日子!", function (err)
if (err) throw err;
console.log("信息写入文件成功!");
console.log(("读取写入的内容!"));
fs.readFile("input.txt", function (err, buffer)
if (err) throw err;
console.log("文件内容为:", buffer.toString());
);
);
2、writeFileSync(同步写入文件),语法为:
fs.writeFileSync(fileName, 写入文件的内容, 'utf8');
示例代码:
let fs = require("fs");
fs.writeFileSync("input.txt", "今天是个好日子!", "utf8");
// 读取文件内容,判断是否写入成功
fs.readFile("input.txt", function (err, buffer)
if (err) throw err;
console.log("文件内容为:", buffer.toString());
)
3.5 二进制方式读取文件(按字节读取)
语法为:
fs.read(fd, buffer, offset, length, position, callback)
fd:通过文件fs.open()方法返回的文件描述符
buffer:被写入数据的缓冲区
offset:偏移量,开始写入缓冲区的位置
length:整数,指定要读取的字节数
position:整数,指定从文件中开始读取。如果位置为null,数据将从当前文件位置读取。
callback:回调函数获取三个参数,(err, bytesRead, buffer)
示例代码:
//读取二进制文件
let fs = require("fs");
let buf = new Buffer(1024);
console.log("打开一个文件!");
fs.open("input.txt", "r+", function (err, fd)
if (err) throw err;
console.log("打开文件成功!");
console.log("开始读取文件!");
fs.read(fd, buf, 0, buf.length, 0, function (err, bytes)
if (err) throw err;
console.log("bytes:",bytes);
// 仅输出读取的字节,以避免垃圾
if (bytes > 0)
let str = buf.slice(0, bytes).toString();
console.log("读取的内容是:", str);
);
)
3.6 关闭文件
fs.close(fd, callback)
fd:这是通过文件fs.open()方法返回的文件描述符。
callback:这是回调函数
示例代码:
let fs = require("fs");
fs.open("input.txt", "r+", function (err, fd)
if (err) throw err;
console.log("打开文件成功!");
fs.close(fd, function (err)
if (err) throw err;
console.log("关闭文件成功!");
)
)
3.7 创建目录
fs.mkdir(path[, mode], callback)
path:包括路径的目录名。
mode:要设置的目录权限。
callback:回调函数
示例代码:
let fs = require("fs");
console.log("开始创建目录:/today")
fs.mkdir("./today", function (err)
if (err) throw err;
console.log("目录创建成功!");
)
在当前文件的目录下又出现了一个文件夹:
3.8 读取目录
fs.readdir(path, callback)
path:包括路径的目录名
callback:回调函数,两个参数(err, files),其中文件的文件名的目录中的数组排除".“和”…"
示例代码:
let fs = require("fs");
console.log("开始读取目录!");
fs.readdir("./today", function (err, files)
if (err) throw err;
files.forEach(function (file)
console.log("file:", file);
)
)
3.9 删除目录
fs.rmdir(path, callback)
path:包括路径的目录名
callback:回调函数
示例代码:
let fs = require("fs");
fs.rmdir("./today", function (err)
if (err) throw err;
console.log("删除目录成功!");
)
3.10 文件复制
fs.copyFile(源文件,目标文件,回调函数)
示例代码:
let fs = require("fs");
fs.copyFile("./input.txt", "./input2.txt", function (err)
if (err) throw err;
console.log("文件复制成功!");
)
3.11 为文件追加内容
将内容添加到文件的末尾,若给定的文件不存在则创建文件,创建的新文件名就是给定的文件名
fs.appendFile(filename,content,callback)
filename:文件名(含路径)
content:内容
callback:回调函数
示例代码:
let fs = require("fs");
fs.appendFile("./input.txt", "橘猫吃不胖!", function (err)
if (err) throw err;
console.log("追加内容成功!");
)
打开input.txt文件,就可以看到多添加了内容。
3.12 删除文件
fs.unlink(path, callback)
path:文件路径。
callback:回调函数,没有参数。
示例代码:
let fs = require("fs");
fs.unlink("./input.txt", function (err)
if (err) throw err;
console.log("删除成功!");
)
3.13 重命名
fs.rename(oldName, newName, callback)
oldName:旧文件名字
newName:新文件名字
callback:回调只有一个可能的异常参数
示例代码:
let fs = require("fs");
fs.rename("./input2.txt", "./today.txt", function (err)
if (err) throw err;
console.log("文件重命名成功!");
)
以上是关于Node.js文件系统(fs模块的使用)的主要内容,如果未能解决你的问题,请参考以下文章