Node.js 文件系統

来源:https://www.cnblogs.com/chenyingying0/archive/2020/03/11/12463025.html
-Advertisement-
Play Games

Node.js 提供一組類似 UNIX(POSIX)標準的文件操作API。 Node.js 文件系統(fs 模塊)模塊中的方法均有非同步和同步版本,例如讀取文件內容的函數有非同步的 fs.readFile() 和同步的 fs.readFileSync()。 非同步的方法函數最後一個參數為回調函數,回調函數 ...


Node.js 提供一組類似 UNIX(POSIX)標準的文件操作API。

Node.js 文件系統(fs 模塊)模塊中的方法均有非同步和同步版本,例如讀取文件內容的函數有非同步的 fs.readFile() 和同步的 fs.readFileSync()。

非同步的方法函數最後一個參數為回調函數,回調函數的第一個參數包含了錯誤信息(error)。

建議大家使用非同步方法,比起同步,非同步方法性能更高,速度更快,而且沒有阻塞。

 

創建 test.txt 文件

這是在test.txt中的內容

創建 main.js 文件

var fs=require("fs");

//非同步
fs.readFile("test.txt",function(err,data){
    if(err){
        return console.error(err);
    }
    console.log("非同步:"+data.toString());
})

//同步
var data=fs.readFileSync("test.txt");
console.log("同步:"+data.toString());

 

 

 

非同步模式下打開文件

fs.open(path, flags[, mode], callback)
  • path - 文件的路徑。

  • flags - 文件打開的行為。具體值詳見下文。

  • mode - 設置文件模式(許可權),文件創建預設許可權為 0666(可讀,可寫)。

  • callback - 回調函數,帶有兩個參數如:callback(err, fd)。

 

 

 

var fs=require("fs");

//非同步
fs.open("test.txt","r+",function(err,data){
    if(err){
        return console.error(err);
    }
    console.log("文件打開成功");
})

 

 

 

非同步模式獲取文件信息的語法格式:

fs.stat(path, callback)
  • path - 文件路徑。

  • callback - 回調函數,帶有兩個參數如:(err, stats), stats 是 fs.Stats 對象。

var fs=require("fs");

//非同步
fs.stat("test.txt","r+",function(err,stats){
    if(err){
        return console.error(err);
    }
    console.log(stats.isFile());//判斷是否是文件
})

 

 

 

 

 

 

var fs=require("fs");

//非同步
fs.stat("test.txt","r+",function(err,stats){
    if(err){
        return console.error(err);
    }
    console.log(stats.isFile());//判斷是否是文件
    console.log(stats.isDirectory());//判斷是否是目錄
})

 

 

 

var fs=require("fs");

//非同步
fs.stat("test.txt",function(err,stats){
    if(err){
        return console.error(err);
    }
    console.log(stats);
    console.log(stats.isFile());//判斷是否是文件
    console.log(stats.isDirectory());//判斷是否是目錄
})

 

 

 

非同步模式下寫入文件的語法格式:

fs.writeFile(file, data[, options], callback)

writeFile 直接打開文件預設是 w 模式,所以如果文件存在,該方法寫入的內容會覆蓋舊的文件內容。

  • file - 文件名或文件描述符。

  • data - 要寫入文件的數據,可以是 String(字元串) 或 Buffer(緩衝) 對象。

  • options - 該參數是一個對象,包含 {encoding, mode, flag}。預設編碼為 utf8, 模式為 0666 , flag 為 'w'

  • callback - 回調函數,回調函數只包含錯誤信息參數(err),在寫入失敗時返回。

var fs=require("fs");

//非同步
fs.writeFile("test.txt","這是新寫入的哈",function(err){
    if(err){
        return console.error(err);
    }
    console.log("數據寫入成功");

    fs.readFile("test.txt",function(err,data){
        if(err){
            return console.error(err);
        }
        console.log(data.toString());
        console.log("數據讀取成功");
    })
})

 

 

 

非同步模式下讀取文件的語法格式:

fs.read(fd, buffer, offset, length, position, callback)
  • fd - 通過 fs.open() 方法返回的文件描述符。

  • buffer - 數據寫入的緩衝區。

  • offset - 緩衝區寫入的寫入偏移量。

  • length - 要從文件中讀取的位元組數。

  • position - 文件讀取的起始位置,如果 position 的值為 null,則會從當前文件指針的位置讀取。

  • callback - 回調函數,有三個參數err, bytesRead, buffer,err 為錯誤信息, bytesRead 表示讀取的位元組數,buffer 為緩衝區對象。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//非同步
fs.open("test.txt","r+",function(err,fd){
    if(err){
        return console.error(err);
    }
    console.log("文件打開成功");

    fs.read(fd,buf,0,buf.length,0,function(err,bytes){
        if(err){
            return console.error(err);
        }
        console.log(bytes+" 位元組被讀取");

        //輸出讀取的位元組
        if(bytes>0){
            console.log(buf.slice(0,bytes).toString());
            console.log("數據讀取成功");
        }
        
    })
})

 

 

 

非同步模式下關閉文件的語法格式:

fs.close(fd, callback)
  • fd - 通過 fs.open() 方法返回的文件描述符。

  • callback - 回調函數,沒有參數。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//非同步
fs.open("test.txt","r+",function(err,fd){
    if(err){
        return console.error(err);
    }
    console.log("文件打開成功");

    fs.read(fd,buf,0,buf.length,0,function(err,bytes){
        if(err){
            return console.error(err);
        }
        console.log(bytes+" 位元組被讀取");

        //輸出讀取的位元組
        if(bytes>0){
            console.log(buf.slice(0,bytes).toString());
            console.log("數據讀取成功");
        }

        //關閉文件
        fs.close(fd,function(err){
            if(err){
                console.error(err);
            }
            console.log("文件關閉成功");
        })
        
    })
})

 

 

 

非同步模式下截取文件的語法格式:

fs.ftruncate(fd, len, callback)
  • fd - 通過 fs.open() 方法返回的文件描述符。

  • len - 文件內容截取的長度。

  • callback - 回調函數,沒有參數。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//非同步
fs.open("test.txt","r+",function(err,fd){
    if(err){
        return console.error(err);
    }
    console.log("文件打開成功");

    //截取文件
    fs.ftruncate(fd,9,function(err){
        if(err){
            return console.error(err);
        }
        console.log("文件截取成功");

        fs.read(fd,buf,0,buf.length,0,function(err,bytes){
            if(err){
                return console.error(err);
            }
            console.log(bytes+" 位元組被讀取");

            //輸出讀取的位元組
            if(bytes>0){
                console.log(buf.slice(0,bytes).toString());
                console.log("數據讀取成功");
            }

            //關閉文件
            fs.close(fd,function(err){
                if(err){
                    console.error(err);
                }
                console.log("文件關閉成功");
            })
            
        })
    })
})

 

 

 

刪除文件的語法格式:

fs.unlink(path, callback)
  • path - 文件路徑。

  • callback - 回調函數,沒有參數。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//刪除文件
fs.unlink("test.txt",function(err){
    if(err){
        console.error(err);
    }
    console.log("文件刪除成功");
})

 

 

 

 

 

 

創建目錄的語法格式:

fs.mkdir(path[, options], callback)
  • path - 文件路徑。

  • options 參數可以是:

    • recursive - 是否以遞歸的方式創建目錄,預設為 false。
    • mode - 設置目錄許可權,預設為 0777。
  • callback - 回調函數,沒有參數。

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//創建目錄
fs.mkdir("temp/test/",function(err){
    if(err){
       return console.error(err);
    }
    console.log("目錄創建成功");
})

 

 

 

 這個案例中必須保證temp目錄是存在的

 

可以添加 recursive: true 參數,不管temp是否存在:

var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//創建目錄
fs.mkdir("temp/test/",{recursive:true},(err)=>{
    if(err){
       throw err;
    }
    console.log("目錄創建成功");
})

 

 

 

 

讀取目錄的語法格式:

fs.readdir(path, callback)
var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//讀取目錄
fs.readdir("temp/test/",function(err,files){
    if(err){
       throw err;
    }
    
    files.forEach(function(file){
        console.log(file);
    })
    
})

 

 

刪除目錄的語法格式:

fs.rmdir(path, callback)
var fs=require("fs");
var buf=new Buffer.alloc(1024);//分配buffer

//刪除目錄
fs.rmdir("temp/test/",function(err){
    if(err){
       throw err;
    }
    
    console.log("刪除目錄成功");
})

 

 

這裡報錯了,因為我要刪除的目錄不是空目錄,得先保證目錄里沒有文件才能刪除目錄

 

以下再補充一些常用的操作方法,要看完整的請上官方文檔

fs.rename(oldPath, newPath, callback)
非同步 rename().回調函數沒有參數,但可能拋出異常。

fs.chmod(path, mode, callback)
非同步 chmod().回調函數沒有參數,但可能拋出異常。

fs.appendFile(filename, data[, options], callback)
非同步追加文件內容。

fs.watchFile(filename[, options], listener)
查看文件的修改。

fs.unwatchFile(filename[, listener])
停止查看 filename 的修改。

fs.exists(path, callback)
檢測給定的路徑是否存在。

fs.access(path[, mode], callback)
測試指定路徑用戶許可權。

fs.createReadStream(path[, options])
返回ReadStream 對象。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 在 ES6 前, 實現模塊化使用的是 RequireJS 或者 seaJS(分別是基於 AMD 規範的模塊化庫, 和基於 CMD 規範的模塊化庫)。 ES6 引入了模塊化,其設計思想是在編譯時就能確定模塊的依賴關係,以及輸入和輸出的變數。 ES6 的模塊化分為導出(export) @與導入(i ...
  • 繪製文字 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>canvas</title> <style> .canvas{border:1px solid pink;} </style> </head> <bo ...
  • 線性漸變 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>canvas</title> <style> .canvas{border:1px solid pink;} </style> </head> <bo ...
  • 去除字元串的頭尾空格: var str = " Runoob "; alert(str.trim()); 輸出結果: Runoob 定義和用法 trim() 方法用於刪除字元串的頭尾空格。 trim() 方法不會改變原始字元串。 詳情鏈接https://www.runoob.com/jsref/js ...
  • 平移 translate(x,y) 註意平移的是坐標原點,而不是線條本身 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>canvas</title> <style> .canvas{border:1px s ...
  • 以下為例: box-shadow:1px 2px 3px 4px color inset; 1px:表示沿x軸的正方向的長度(如果是負數,則為沿x軸 的負方向的長度); 2px:表示沿y軸的正方向的長度(如果是負數,則為沿y軸的負方向的長度); 3px:表示陰影的模糊度,並且只能為正數; 4px:表 ...
  • 定義和用法 shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值。 語法 ~~~ arrayObject.shift() ~~~ 返回值 數組原來的第一個元素的值。 說明 如果數組是空的,那麼 shift() 方法將不進行任何操作,返回 undefined 值。請註意,該方法不 ...
  • 博客最近上了最新版本的FoundationJS、jQuery、Amaze、Modenizr四種框架的CDN 目的是自己用,想在博客裡面掛CDN(因為最新版本的FoundationJS沒有),自己有在學習怎麼用。 很多人不知道Fundation怎麼用,我會說的!!! FoundationJS6_CSS... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...