nodejs中的讀取文件fs與文件路徑path解析
什么是nodejs?
Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境,nodejs允許javascript代碼運(yùn)行在服務(wù)端
1. nodejs不是一門新的編程語(yǔ)言,nodejs是在服務(wù)端運(yùn)行javascript的運(yùn)行環(huán)境
2. 運(yùn)行環(huán)境:寫得程序想要運(yùn)行必須要有對(duì)應(yīng)的運(yùn)行環(huán)境
- php代碼必須要有apache服務(wù)器
- 在web端,瀏覽器就是javascript的運(yùn)行環(huán)境
- 在服務(wù)端,nodejs就是javascript的運(yùn)行環(huán)境
2. javascript并不只是能運(yùn)行在瀏覽器端,瀏覽器端能夠運(yùn)行js是因?yàn)闉g覽器有js解析器,因此只需要有js解析器,任何軟件都可以運(yùn)行js。
3. nodejs可以在服務(wù)端運(yùn)行js,因?yàn)閚odejs是基于chrome v8的js引擎。
4.下載地址:https://nodejs.org/en/download/
global模塊-全局變量
Node.js 中的全局對(duì)象是 global, 類似于瀏覽器中的window
常用的global屬性
console
: 用于打印日志setTimeout
/clearTimeout
: 設(shè)置清除延時(shí)器setInterval
/clearInterval
: 設(shè)置清除定時(shí)器__dirname
: 當(dāng)前文件的路徑,不包括文件名__filename
: 獲取當(dāng)前文件的路徑,包括文件名
//與模塊化相關(guān)的,模塊化的時(shí)候會(huì)用到
require
exports
module
fs模塊
fs模塊是nodejs中最常用的一個(gè)模塊,因此掌握f(shuō)s模塊非常的有必要,fs模塊的方法非常多,用到了哪個(gè)查哪個(gè)即可。
文檔地址:http://nodejs.cn/api/fs.html
注意:
- 除了global模塊中的內(nèi)容可以直接使用,其他模塊都是需要加載的。
- fs模塊不是全局的,不能直接使用。因此需要導(dǎo)入才能使用。
const fs = require("fs");
讀取文件
語(yǔ)法:fs.readFile(path[, options], callback)
方式一:不傳編碼參數(shù)
//參數(shù)1: 文件的名字 //參數(shù)2: 讀取文件的回調(diào)函數(shù) ? //參數(shù)1:錯(cuò)誤對(duì)象,如果讀取失敗,err會(huì)包含錯(cuò)誤信息,如果讀取成功,err是null ? //參數(shù)2:讀取成功后的數(shù)據(jù)(是一個(gè)Buffer對(duì)象) fs.readFile("data.txt", function(err, data){ ? console.log(err); ? console.log(data); });
方式二:傳編碼參數(shù)
//參數(shù)1: 文件的路徑 //參數(shù)2: 編碼,如果設(shè)置了,返回一個(gè)字符串,如果沒(méi)有設(shè)置,會(huì)返回一個(gè)buffer對(duì)象 //參數(shù)3: 回調(diào)函數(shù) fs.readFile("data.txt", "utf8",function(err, data){ ? console.log(err); ? console.log(data); });
關(guān)于Buffer對(duì)象
1. Buffer對(duì)象是Nodejs用于處理二進(jìn)制數(shù)據(jù)的。
2. 其實(shí)任意的數(shù)據(jù)在計(jì)算機(jī)底層都是二進(jìn)制數(shù)據(jù),因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)二進(jìn)制。
3. 所以讀取任意的文件,返回的結(jié)果都是二進(jìn)制數(shù)據(jù),即Buffer對(duì)象
4. Buffer對(duì)象可以調(diào)用toString()方法轉(zhuǎn)換成字符串。
寫文件
語(yǔ)法:fs.writeFile(file, data[, options], callback)
//參數(shù)1:寫入的文件名(如果文件不存在,會(huì)自動(dòng)創(chuàng)建) //參數(shù)2:寫入的文件內(nèi)容(注意:寫入的內(nèi)容會(huì)覆蓋以前的內(nèi)容) //參數(shù)3:寫文件后的回調(diào)函數(shù) fs.writeFile("2.txt", "hello world, 我是一個(gè)中國(guó)人", function(err){ ? if(err) { ? ? return console.log("寫入文件失敗", err); ? } ? console.log("寫入文件成功"); });
注意:
寫文件的時(shí)候,會(huì)把原來(lái)的內(nèi)容給覆蓋掉
追加文件
語(yǔ)法:fs.appendFile(path, data[, options], callback)
//參數(shù)1:追加的文件名(如果文件不存在,會(huì)自動(dòng)創(chuàng)建) //參數(shù)2:追加的文件內(nèi)容(注意:寫入的內(nèi)容會(huì)覆蓋以前的內(nèi)容) //參數(shù)3:追加文件后的回調(diào)函數(shù) fs.appendFile("2.txt", "我是追加的內(nèi)容", function(err){ ? if(err) { ? ? return console.log("追加文件內(nèi)容失敗"); ? } ? console.log("追加文件內(nèi)容成功"); })
文件同步與異步的說(shuō)明
fs中所有的文件操作,都提供了異步和同步兩種方式
異步方式:不會(huì)阻塞代碼的執(zhí)行
//異步方式 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");
同步方式:會(huì)阻塞代碼的執(zhí)行
//同步方式 console.log(111); var result = fs.readFileSync("2.txt", "utf-8"); console.log(result); console.log(222);
總結(jié):同步操作使用雖然簡(jiǎn)單,但是會(huì)影響性能,因此盡量使用異步方法,尤其是在工作過(guò)程中。
path模塊
路徑操作的問(wèn)題
在讀寫文件的時(shí)候,文件路徑可以寫相對(duì)路徑或者絕對(duì)路徑
//data.txt是相對(duì)路徑,讀取當(dāng)前目錄下的data.txt, 相對(duì)路徑相對(duì)的是指向node命令的路徑 //如果node命令不是在當(dāng)前目錄下執(zhí)行就會(huì)報(bào)錯(cuò), 在當(dāng)前執(zhí)行node命令的目錄下查找data.txt,找不到 fs.readFile("data.txt", "utf8", function(err, data) { ? if(err) { ? ? console.log("讀取文件失敗", err); ? } ? ? console.log(data); });
相對(duì)路徑:相對(duì)于執(zhí)行node命令的路徑
絕對(duì)路徑:__dirname: 當(dāng)前文件的目錄,__filename: 當(dāng)前文件的目錄,包含文件名
path模塊的常用方法
關(guān)于路徑,在linux系統(tǒng)中,路徑分隔符使用的是/,但是在windows系統(tǒng)中,路徑使用的\
在我們拼寫路徑的時(shí)候會(huì)帶來(lái)很多的麻煩,經(jīng)常會(huì)出現(xiàn)windows下寫的代碼,在linux操作系統(tǒng)下執(zhí)行不了,path模塊就是為了解決這個(gè)問(wèn)題而存在的。
常用方法:
path.join();//拼接路徑 ? //windows系統(tǒng)下 > path.join("abc","def","gg", "index.html") "abc\def\gg\a.html" ? //linux系統(tǒng)下 > path.join("abc","def","gg", "index.html") 'abc/def/gg/index.html' ? path.basename(path[, ext])?? ?返回文件的最后一部分 path.dirname(path)?? ?返回路徑的目錄名 path.extname(path)?? ?獲取路徑的擴(kuò)展名 ? 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
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享
下面小編就為大家分享一篇基于node打包可執(zhí)行文件工具_(dá)Pkg使用心得分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Node.js檢測(cè)端口(port)是否被占用的簡(jiǎn)單示例
大家有沒(méi)有遇到過(guò)在開(kāi)啟本地服務(wù)時(shí),有這么一種情況:當(dāng)前端口已經(jīng)被另一個(gè)項(xiàng)目使用了,導(dǎo)致服務(wù)開(kāi)啟失敗。那么接下來(lái),我們通過(guò)簡(jiǎn)簡(jiǎn)單單的示例代碼來(lái)檢測(cè)端口是否已經(jīng)被占用。有需要的朋友們可以參考借鑒。2016-09-09nodejs檢測(cè)因特網(wǎng)是否斷開(kāi)的解決方案
這篇文章主要給大家介紹了關(guān)于nodejs如何檢測(cè)因特網(wǎng)是否斷開(kāi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nodejs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04nodejs+koa2 實(shí)現(xiàn)模仿springMVC框架
這篇文章主要介紹了nodejs+koa2 實(shí)現(xiàn)模仿springMVC框架,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10如何用npm命令刪除開(kāi)發(fā)項(xiàng)目中的node_modules文件夾
每個(gè)項(xiàng)目都會(huì)產(chǎn)生一個(gè)node_modules,每個(gè)node_modules少則幾十兆,多則幾百甚至上千兆,隨著時(shí)間的積累,維護(hù)項(xiàng)目的增加,整個(gè)項(xiàng)目目錄體積會(huì)越來(lái)越大,這篇文章主要給大家介紹了關(guān)于如何用npm命令刪除開(kāi)發(fā)項(xiàng)目中的node_modules文件夾,需要的朋友可以參考下2023-12-12npm?list輸出結(jié)果包含extraneous標(biāo)志記錄分析
這篇文章主要為大家介紹了npm?list輸出結(jié)果包含extraneous標(biāo)志記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼
這篇文章主要介紹了NodeJs之word文件生成與解析的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04