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());//程
        });
    });
});
相關文章
相關標籤/搜索