nodejs中的讀取文件fs與文件路徑path解析
什麼是nodejs?
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境,nodejs允許javascript代碼運行在服務端
1. nodejs不是一門新的編程語言,nodejs是在服務端運行javascript的運行環境
2. 運行環境:寫得程序想要運行必須要有對應的運行環境
- php代碼必須要有apache服務器
- 在web端,瀏覽器就是javascript的運行環境
- 在服務端,nodejs就是javascript的運行環境
2. javascript並不隻是能運行在瀏覽器端,瀏覽器端能夠運行js是因為瀏覽器有js解析器,因此隻需要有js解析器,任何軟件都可以運行js。
3. nodejs可以在服務端運行js,因為nodejs是基於chrome v8的js引擎。
4.下載地址:https://nodejs.org/en/download/
global模塊-全局變量
Node.js 中的全局對象是 global, 類似於瀏覽器中的window
常用的global屬性
console
: 用於打印日志setTimeout
/clearTimeout
: 設置清除延時器setInterval
/clearInterval
: 設置清除定時器__dirname
: 當前文件的路徑,不包括文件名__filename
: 獲取當前文件的路徑,包括文件名
//與模塊化相關的,模塊化的時候會用到
require
exports
module
fs模塊
fs模塊是nodejs中最常用的一個模塊,因此掌握fs模塊非常的有必要,fs模塊的方法非常多,用到瞭哪個查哪個即可。
文檔地址:http://nodejs.cn/api/fs.html
註意:
- 除瞭global模塊中的內容可以直接使用,其他模塊都是需要加載的。
- fs模塊不是全局的,不能直接使用。因此需要導入才能使用。
const fs = require("fs");
讀取文件
語法:fs.readFile(path[, options], callback)
方式一:不傳編碼參數
//參數1: 文件的名字 //參數2: 讀取文件的回調函數 //參數1:錯誤對象,如果讀取失敗,err會包含錯誤信息,如果讀取成功,err是null //參數2:讀取成功後的數據(是一個Buffer對象) fs.readFile("data.txt", function(err, data){ console.log(err); console.log(data); });
方式二:傳編碼參數
//參數1: 文件的路徑 //參數2: 編碼,如果設置瞭,返回一個字符串,如果沒有設置,會返回一個buffer對象 //參數3: 回調函數 fs.readFile("data.txt", "utf8",function(err, data){ console.log(err); console.log(data); });
關於Buffer對象
1. Buffer對象是Nodejs用於處理二進制數據的。
2. 其實任意的數據在計算機底層都是二進制數據,因為計算機隻認識二進制。
3. 所以讀取任意的文件,返回的結果都是二進制數據,即Buffer對象
4. Buffer對象可以調用toString()方法轉換成字符串。
寫文件
語法:fs.writeFile(file, data[, options], callback)
//參數1:寫入的文件名(如果文件不存在,會自動創建) //參數2:寫入的文件內容(註意:寫入的內容會覆蓋以前的內容) //參數3:寫文件後的回調函數 fs.writeFile("2.txt", "hello world, 我是一個中國人", function(err){ if(err) { return console.log("寫入文件失敗", err); } console.log("寫入文件成功"); });
註意:
寫文件的時候,會把原來的內容給覆蓋掉
追加文件
語法:fs.appendFile(path, data[, options], callback)
//參數1:追加的文件名(如果文件不存在,會自動創建) //參數2:追加的文件內容(註意:寫入的內容會覆蓋以前的內容) //參數3:追加文件後的回調函數 fs.appendFile("2.txt", "我是追加的內容", function(err){ if(err) { return console.log("追加文件內容失敗"); } console.log("追加文件內容成功"); })
文件同步與異步的說明
fs中所有的文件操作,都提供瞭異步和同步兩種方式
異步方式:不會阻塞代碼的執行
//異步方式 var fs = require("fs"); console.log(111); fs.readFile("2.txt", "utf8", function(err, data){ if(err) { return console.log("讀取文件失敗", err); } console.log(data); }); console.log("222");
同步方式:會阻塞代碼的執行
//同步方式 console.log(111); var result = fs.readFileSync("2.txt", "utf-8"); console.log(result); console.log(222);
總結:同步操作使用雖然簡單,但是會影響性能,因此盡量使用異步方法,尤其是在工作過程中。
path模塊
路徑操作的問題
在讀寫文件的時候,文件路徑可以寫相對路徑或者絕對路徑
//data.txt是相對路徑,讀取當前目錄下的data.txt, 相對路徑相對的是指向node命令的路徑 //如果node命令不是在當前目錄下執行就會報錯, 在當前執行node命令的目錄下查找data.txt,找不到 fs.readFile("data.txt", "utf8", function(err, data) { if(err) { console.log("讀取文件失敗", err); } console.log(data); });
相對路徑:相對於執行node命令的路徑
絕對路徑:__dirname: 當前文件的目錄,__filename: 當前文件的目錄,包含文件名
path模塊的常用方法
關於路徑,在linux系統中,路徑分隔符使用的是/,但是在windows系統中,路徑使用的\
在我們拼寫路徑的時候會帶來很多的麻煩,經常會出現windows下寫的代碼,在linux操作系統下執行不瞭,path模塊就是為瞭解決這個問題而存在的。
常用方法:
path.join();//拼接路徑 //windows系統下 > path.join("abc","def","gg", "index.html") "abc\def\gg\a.html" //linux系統下 > path.join("abc","def","gg", "index.html") 'abc/def/gg/index.html' path.basename(path[, ext]) 返回文件的最後一部分 path.dirname(path) 返回路徑的目錄名 path.extname(path) 獲取路徑的擴展名 var path = require("path"); var temp = "abc\\def\\gg\\a.html"; console.log(path.basename(temp));//a.html console.log(path.dirname(temp));//abc\def\gg console.log(path.extname(temp));//.html
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- nodejs 中的讀取文件fs模塊示例詳解
- node.js文件系統模塊和兩個重要模塊
- JavaScript中異步與回調的基本概念及回調地獄現象
- 總結Node.js中9種fs模塊文件操作方法(文件夾遞歸刪除知識)
- nodejs與瀏覽器中全局對象區別點總結