Node.js 文件讀寫


1.fs模塊

在node.js中,所有文件的操作都是通過fs模塊來實現的。包括文件目錄的創建,刪除,查詢以及文件的讀取,寫入。
在fs模塊中,所有的方法都分成同步和異步兩種實現,具有sync后綴的為同步方法,不具有sync后綴的未異步方法。同步方法使用 = 接收返回的結果和數據,而異步方法多一個參數(回調函數),返回的結果和數據以函數參數的形式返回

操作文件前,先引入fs模塊

var fs = require("fs")

2.文件讀取

fs.readFile() :異步讀取
參數一:文件路徑,如果這個文件不存在,則會出錯。
參數二:可選,編碼類型,默認為buffer
參數三:回調函數,它共有兩個參數(err,data)如果文件寫入成功,則err為null,否則為錯誤代碼,data為讀取文件的內容

注意:如果要返回字符串,可以在調用readFile時傳入參數utf-8,或者直接用toString()來轉化data的數據格式。

let fs = require("fs");
fs.readFile('day.txt',function(err, data) {
    console.log(err)
    if (err) {
        console.log('文件讀取失敗,錯誤原因:' + err);
    } else {
        console.log('文件讀取成功');
        console.log(data);//字節數組
        console.log(data.toString());//今天星期二
    }
})

設置encoding為 'utf-8'

let fs = require("fs");
fs.readFile('day.txt','utf-8',function(err, data) {
    if (err) {
        //如果去讀出錯,拋出錯誤后不會再執行后面的代碼
        throw err;
    } 
    console.log(data);//今天星期二
})

3.寫文件

fs.writeFile() 異步寫文件
參數一:被寫入的文件路徑,如果這個文件不存在,則會新建一個。
參數二:被寫入的內容
參數三:回調函數,里面的有個參數err,如果文件寫入成功,則err為null,否則為錯誤代碼

let fs = require("fs");
var str = "今天是星期三";
fs.writeFile('day.txt', str,function(err) {
    if (err) {
        console.log('文件寫入失敗,錯誤原因:' + err);
    } else {
        console.log('文件寫入成功');
    }
})

day.txt的文件內容覆蓋成 "今天是星期三"

4.獲取當前執行文件的路徑

__dirname:當前執行的js文件所在的目錄
__filename:當前執行的js文件的完整路徑

//當前js文件的完整路徑為 F:\node\02fs\test.js
let fs = require("fs");
console.log(__dirname);//F:\node\02fs
console.log(__filename);//F:\node\02fs\test.js

注意:這兩個變量雖然看似全局的,但實際上不是。當執行這個js文件時,這個文件中的代碼會被放入一個自執行函數中來執行,而__dirname和__filename是這個自執行函數的參數而已,所以能夠直接使用,即使它不是全局變量。

5.路徑拼接

如果要操作的文件與當前文件不再同一目錄,則需要用到路徑拼接。但是每個操作系統對應的路徑格式是有差異的,例如windows的路徑:F:\node\02fs\test.js使用"",而Linux和蘋果系統使用的是"/",所以手動拼接路徑就有可能出現問題,為了解決這個問題,可以使用path模塊的join()方法來拼接路徑

語法:path.join()
這個方法一般與__dirname配合使用

const fs = require("fs");
const path = require('path');

//獲取當前目錄下source/02.txt文件的路徑
var fileName = path.join(__dirname,"source",'02.txt');
//打印路徑
console.log(fileName);//F:\node\02fsAndPath\source\02.txt
//根據這個文件路徑讀取這個文件
fs.readFile(fileName,function(err,data) {
    if (err) {
        console.log('文件讀取失敗,錯誤原因:' + err);
    } else {
        console.log('文件讀取成功');
        console.log(data.toString());//今天到底是星期幾?
    }
})

6.創建文件夾

fs.mkdir()
參數一:要創建的文件夾的路徑
參數二:回調函數

實例:在當前文件夾下創建3個目錄

const fs = require("fs");
const path = require('path');

var nameArr = ["html","css","javascript"]

//遍歷數組,依次創建文件夾
for(let i=0;i<nameArr.length;i++){
    //拼接要創建的文件夾的路徑
    var dirPath = path.join(__dirname,nameArr[i])
    //根據路徑創建目錄
    fs.mkdir(dirPath,function(err){
        if(err){
            console.log(err)
        }else{
            console.log(nameArr[i] + "文件夾創建成功")
        }
    })
}

這個例子見證了什么叫異步操作,后面執行的代碼反而先執行完畢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM