资讯专栏INFORMATION COLUMN

Node.js学习之路05——fs文件系统之文件的写入和读取

jimhs / 1979人阅读

fs文件系统
Node.js中,提供一个fs模块,以实现文件及目录的读写操作。
1. 同步和异步方法
一般来讲,读取文件使用异步的方法,但是在读取例如系统配置文件时,应该使用同步的方法
2. 普通文件写入和读取 2.1 文件写入 2.1.1 写入一个基本的文本文件

如果不存在要写入的文件,那么将会自动创建一个文件

const fs = require("fs");
let writeData = "The engaged couple will appear for a photo outside Kensington Palace on Monday afternoon, and will take part in a broadcast interview in the evening.";
fs.writeFile("./writeFile.txt", writeData, "utf-8", function (err) {
    if (err) {
        console.log("there are some wrong happened~");
    } else {
        console.log("Write successfully~~");
    }
});
2.1.2 复制图片及各种二进制文件(以图片文件为例)

当前文件夹下有一个fileImage.jpg的图片文件

const fs = require("fs");
fs.readFile("./fileImage.jpg", "base64", function (err, data) {
    if (err) {
        console.log("读取图片失败,请检查错误");
    } else {
        fs.writeFile("./fileImageCopy.jpg", data, "base64", function (err) {
            if (err) {
                console.log("复制图片文件失败");
            } else {
                console.log("复制图片文件成功");
            }
        });
    }
});
2.2 文件读取 2.2.1 文件异步读取
当前目录下有一个readFile.txt文件,文件的内容是hello, this is a read file txt.
const fs = require("fs");
fs.readFile("./readFile.txt", "utf-8", function(err, data){
    if (err) {
        console.log("read file wrong", err);
    } else {
        console.log("dataAsync");
        console.log(data);
    }
});
/**
 * dataAsync
 * hello, this is a read file txt.
 * **/
2.2.2 文件同步读取
const fs = require("fs");
let dataSync = fs.readFileSync("./readFile.txt", "utf-8");
console.log("dataSync");
console.log(dataSync);
/**
 * dataSync
 * hello, this is a read file txt.
 * **/
3. 追加数据 3.1 对文本文件同步追加数据
const fs = require("fs");
const appendFileContent = "this is appendFileContent box";
fs.appendFileSync("./appendFile.txt", appendFileContent, "utf-8");
3.2 对文本文件异步追加数据

appendFile.txt原本内容

hello, this a basic append txt file.

-
const fs = require("fs");
const appendFileContent = "this is appendFileContent box";
fs.appendFile("./appendFile.txt", appendFileContent, "utf-8", function (err) {
    if (err) {
        console.log("追加文件操作失败");
    } else {
        fs.readFile("./appendFile.txt", "utf-8", function (err, data) {
            if (err) {
                console.log("追加成功,但是读取失败");
            } else {
                console.log("追加成功,读取操作成功");
                console.log(data);
            }
        });
    }
});
/**
* 追加成功,读取操作成功
* hello, this a basic append txt file.
* 
* -this is appendFileContent box 
* **/
4. 文件的打开和关闭
fd代表打开文件时返回的文件描述符,在windows操作系统中,文件描述符也称为文件句柄。
4.1 异步打开文件
const fs = require("fs");
fs.open("./openFile.txt", "r", (err, fd) => {
    if (err) {
        console.log("open file wrong", err);
    } else {
        console.log("open");
        console.log(fd);
    }
});
/**
* open
* 3
* **/
4.2 同步打开文件
const fs = require("fs");
let openSync = fs.openSync("./openFile.txt", "r");
console.log("openSync");
console.log(fd);
fs.clodeSync(fd); // 同步关闭文件
/**
* openSync
* 3
* **/
5. fsfs.writefs.read

在使用write方法或者writeSync方法在文件中写入数据时

操作系统的做法是首先将该部分数据读取到内存中,再把数据写到文件中

当数据读取完毕时不代表数据已经写完,因为还有一步部分可能会留在内存缓冲区中.

这时候如果调用close或者closeSync方法关闭文件,那么这部分数据就会丢失,

这时候就可以采用fs模块中的fsync方法对文件进行同步操作,即将内存缓冲区中的剩余数据全部写入文件.

5.1 文件写入

当前目录下有一个write.txt文件,文件的内容是我喜欢编程

5.1.1 异步写入

更加底层的一种写入方法,可以从指定位置写入数据

fs.write写入,需要先打开文件,根据文件资源句柄,写入内容

fs.write(fd, buffer, offset, length, position, callback(err, written, buffer))

const fs = require("fs");
let buf = new Buffer("我喜欢编程");
fs.open("./write.txt", "w", function (err, fd) {
    if (err) {
        console.log("open file wrong", err);
    } else {
        fs.write(fd, buf, 3, 9, 0, function (err, written, buffer) {
            if (err) {
                console.log("写文件操作失败");
            } else {
                console.log("写文件操作成功");
                console.log(buffer.toString());
            }
        });
    }
});
/**
 * 写文件操作成功
 * 我喜欢编程
 * **/
5.1.2 同步写入

fs.writeSync(fd, buffer, offset, length, position)

const fs = require("fs");
let buf = new Buffer("我喜欢编程");
fs.open("./write.txt", "w", function (err, fd) {
    if (err) {
        console.log("open file wrong", err);
    } else {
        fs.writeSync(fd, buf, 3, 9, 0);
    }
});
5.2 文件读取

当前目录下有一个open.txt文件,文件的内容是我喜欢编程

5.2.1 同步读取

fs.readSync(fd, buffer, offset, length, position, callback)

const fs = require("fs");
 fs.open("./open.txt", "r", function(err, fd){
    var buf = new Buffer(255).fill(0);
    var bytesRead = fs.readSync(fd, buf, 0, 9, 3);
    console.log(bytesRead);//9
    console.log(buf.slice(0, bytesRead).toString());//喜欢编
});
5.2.2 异步读取

fs.read(fd, buffer, offset, length, position, callback(err,bytesRead, buffer))

const fs = require("fs");
fs.open("./open.txt", "r", function (err, fd) {
    let buf = new Buffer(255).fill(0);//缓存区
    fs.read(fd, buf, 0, 9, 3, function (err, bytesRead, buffer) {
        console.log(buffer.slice(0, bytesRead).toString());//喜欢编
    });
});

fs.open("./open.txt", "r", function (err, fd) {
    let buf = new Buffer(255).fill(0);//缓存区
    fs.read(fd, buf, 0, 9, 3, function (err, bytesRead, buffer) {
        console.log(buffer.slice(0, bytesRead).toString());//喜欢编
        fs.read(fd, buf, 0, 3, null, function (err, bytesRead, buffer) {
            console.log(buffer.slice(0, bytesRead).toString());//程
        });
    });
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/60308.html

相关文章

  • Node.js学习05——fs文件系统文件写入读取

    fs文件系统 在Node.js中,提供一个fs模块,以实现文件及目录的读写操作。 1. 同步和异步方法 一般来讲,读取文件使用异步的方法,但是在读取例如系统配置文件时,应该使用同步的方法 2. 普通文件写入和读取 2.1 文件写入 2.1.1 写入一个基本的文本文件 如果不存在要写入的文件,那么将会自动创建一个文件 const fs = require(fs); let writeData = T...

    leanote 评论0 收藏0
  • Node.js学习08——fs文件系统stream流基本介绍

    摘要:中各种用于读取数据的对象对象描述用于读取文件代表客户端请求或服务器端响应代表一个端口对象用于创建子进程的标准输出流。如果子进程和父进程共享输入输出流,则子进程的标准输出流被废弃用于创建子进程的标准错误输出流。 9. stream流 fs模块中集中文件读写方法的区别 用途 使用异步方式 使用同步方式 将文件完整读入缓存区 readFile readFileSync 将文件部...

    BoYang 评论0 收藏0
  • Node.js学习06——fs文件系统目录操作与文件信息

    6. 目录操作 6.1 创建目录 如果存在该目录,就创建失败 同步创建目录fs.mkdirSync(path, [mode]) const fs = require(fs); let mkdir = ./mkdir; fs.mkdir(mkdir, (err) => { if (err) { console.log(`mkdir ${mkdir} file faile...

    用户83 评论0 收藏0
  • Node.js学习14——Process进程

    摘要:在中,只支持单线程。在这种场合下,如果能够使用多进程,则可以为每个请求分配一个进程,从而可以更好地使用服务器端的资源。进程进程对象的属性用于运行应用程序的可执行文件的绝对路径的版本号及其各依赖的版本号当前运行的平台用于读入标准输入流的对象。 Process 在Node.js中,只支持单线程。但是在应用程序中,如果只使用单线程进行操作,从接收请求开始到返回响应为止的这段时间内可能存在很长...

    darry 评论0 收藏0
  • Node.js学习07——fs文件系统文件或目录执行其他操作

    摘要:如果打开一个文件的符号链接文件进行编辑,操作系统将自动打开符号链接中所指向的原文件进行编辑,如果打开一个目录的符号链接文件进行文件的操作编辑或删除操作,则操作系统将西东打开符号链接中所指向的原目录并执行相应的操作。 8. 对文件或目录执行的其他操作 8.1 修改文件名字或移动文件目录fs.rename fs.rename(oldPath, newPath, callback(err...

    lordharrd 评论0 收藏0

发表评论

0条评论

jimhs

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<