Node.js进修之路05——fs文件体系之文件的写入和读取

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());//程
        });
    });
});
    原文作者:Karuru
    原文地址: https://segmentfault.com/a/1190000013343713
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞