process 模塊 在使用的時候無需通過 require() 函數來加載該模塊,可以直接使用。
fs 模塊,在使用的時候,必須通過 require() 函數來加載該模塊,方可使用。
原因:process 模塊是全局的模塊,而 fs 模塊不是全局模塊。全局模塊可以直接使用,而非全局模塊需要通過 require('') 加載該模塊。
一、實現文件寫入操作
1 //1.加載文件操作模塊,fs 模塊 2 var fs = require('fs'); 3 4 //2.實現文件寫入操作 5 var msg = "hello world,你好世界"; 6 7 //調用 fs.writeFile() 進行文件寫入 8 // fs.writeFile() 是異步方法 9 // fs.writeFile('寫入文件的路徑','要寫入的數據','文檔編碼格式','回調函數') 10 fs.writeFile('hello.txt', msg, 'utf8', (err) => { 11 //如果 err===null,表示文件寫入 12 //只要 err 里面不是null,就表示寫入文件失敗了! 13 if (err) { 14 console.log('寫入文件出錯拉!具體錯誤:' + err) 15 } else { 16 console.log('ok'); 17 } 18 });
二、實現文件讀取操作
1 //1.加載文件操作模塊,fs 模塊 2 var fs = require('fs'); 3 4 //2.調用 fs.readFile() 方法來讀取文件 5 // fs.readFile('讀取文件的路徑','文件編碼格式','回調函數') 6 //在讀取文件的時候,如果傳遞了編碼格式,那么回調函數中的 data默認就會轉換為 字符串,否則data 參數的數據是一個 Buffer 對象,里面保存的就是一個一個的字節(理解為字節數組) 7 //把 Buffer 對象轉換為字符串,調用 toString() 方法 8 9 fs.readFile('./hello.txt', 'utf8', (err, data) => { 10 if (err) { 11 throw err; 12 } else { 13 console.log(data); 14 } 15 });
1.讀取文件中的路徑問題
./ 相對路徑,相對的執行 node 命令的路徑,而不是相對於正在執行的這個 js 文件來查找 hello.txt
解決在文件讀取中 ./ 相對路徑的問題
解決方法:使用 __dirname、__filename
__dirname:表示,當前正在執行的 js 文件所在的目錄
___filename:表示,當前正在執行的 js 文件的完整路徑
// console.log(__dirname); C:\Users\zhuyujie\Desktop\nodejs\1.fs
// console.log(__filename); C:\Users\zhuyujie\Desktop\nodejs\1.fs\2.fs_readFile.js
注:__dirname、___filename並不是全局的
應該將上面代碼的路徑修改成:
1 var fs = require('fs'); 2 3 // var filename= __dirname+'\\'+'hello.txt' (不推薦使用) 4 5 //推薦使用通過 path 模塊進行路徑拼接 6 var path = require('path'); 7 8 var filename = path.join(__dirname, 'hello.txt') 9 10 // console.log(filename); 11 12 fs.readFile(filename, 'utf8', (err, data) => { 13 if (err) { 14 throw err; 15 } 16 console.log(data); 17 18 });
三、創建文件夾
1 var fs=require('fs'); 2 3 fs.mkdir('test-mkdir',(err)=>{ 4 if (err) { 5 console.log('創建目錄出錯了,詳情'+err); 6 } else { 7 console.log('創建目錄成功'); 8 } 9 });