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模块的使用)的主要内容,如果未能解决你的问题,请参考以下文章

初识 Node.js 丨fs 文件系统模块

node.js 使用fs模块对系统文件及目录进行读写操作

Node.js fs文件系统相关操作

Node.js fs文件系统相关操作

node.js 的系统模块——fs文件操作

Node.js 初识 fs 模块