[TOC]
>[warning] 參照api版本為10.16.2
`fs`,即`filesystem`,該模塊提供本地文件的讀寫能力。這個模塊幾乎對所有操作提供異步和同步兩種操作方式,以供選擇
## 1. writeFile(),writeFileSync() 寫入文件
* `writeFile(file, data[, options], callback)` 異步寫入文件
~~~
fs.writeFile('./test.txt','this is a test', function(err) {
if (err) {
throw err
}
})
~~~
* writeFileSync(file, data[, options])
異步寫入的同步版本
## 2. readFile(), readileSync() 讀取數據
* `readFile(path[, options], callback)` 異步讀取數據
~~~
var cwd = process.cwd()
console.log('cwd', cwd)
fs.readFile('./images/風景1.jpg', function(err, buffer) {
if (err) {
throw err
}
console.log('buffer', buffer)
})
~~~
path: 文件路徑,可以是絕對路徑,也可以是相對路徑。相對路徑則必須是當前進程所在的路徑(`process.cwd()`);
options: 可選填,默認配置對象為 { encoding: null, flag: 'r' } 即文件編碼為null,讀取模式為只讀。不填寫,readFile默認返回Buffer實例,否則返回字符串
callback: 讀取完成的回調函數,該函數的第一個參數為發生錯誤時的錯誤對象,第二個參數代表文件內容
* `readileSync(path[, options])` 同步讀取數據
異步讀取的同步版本
## 3. mkdir(), mkdirSync() 創建目錄
* `mkdir(path[, options], callback)`,異步創建目錄
~~~
var fs = require('fs')
// 無論該目錄是否存在temp和temp/test
fs.mkdir('./tmp/test/t', { recursive: true }, function(err) {
if (err) {
throw err
}
});
~~~
* `mkdirSync(path[, options])`
異步創建目錄的同步版本
## 4. readdir(),readdirSync() 讀取目錄
* readdir方法讀取目錄內容,返回一個包含子目錄名稱的數組
~~~
fs.readdir('./tmp/test/', function(err, files) {
if (err) {
throw err
}
console.log('files, ', files)
})
~~~
* readdirSync(path[, options])
異步讀取目錄的同步版本
## 5. stat() 判斷正在處理的內容類型
~~~
fs.stat('./tmp/test/t', function(err, stats) {
if (err) {
throw err
}
console.log('stats, ', stats)
})
~~~
* fs.stat(path[, options], callback),該方法的參數是一個文件或目錄,它產生一個對象,該對象包含了該文件或目錄的具體信息。我們往往通過該方法,判斷正在處理的到底是一個文件,還是一個目錄
## 6. watchfile(),unwatchfile() 監聽/解除監聽文件
* `watchfile(filename[, options], listener)`,該方法監聽一個文件,每當訪問文件時都會調用`listener`回調。
~~~
fs.watchFile('test.text', function(curr, prev) {
console.log(`當前的最近修改時間是: ${curr.mtime}`);
console.log(`之前的最近修改時間是: ${prev.mtime}`);
})
~~~
* `unwatchfile(filename[, listener])`方法用于解除對文件的監聽
## 7. createReadStream(),createWriteStream() 打開/寫入數據
~~~
var fs = require('fs');
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
var last = 0;
while (index > -1) {
var line = remaining.substring(last, index);
last = index + 1;
func(line, index);
index = remaining.indexOf('\n', last);
}
remaining = remaining.substring(last);
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining, 'last');
}
});
}
function func(data, index) {
console.log(`${index}: ${data}`);
}
var input = fs.createReadStream('./lines.txt');
readLines(input, func);
~~~
* createReadStream(path[, options]),該方法往往用于打開大型的文本文件,創建一個讀取操作的數據流。所謂大型文本文件,指的是文本文件的體積很大,讀取操作的緩存裝不下,只能分成幾次發送,每次發送會觸發一個data事件,發送結束會觸發end事件
* createWriteStream方法創建一個寫入數據流對象,該對象的write方法用于寫入數據,end方法用于結束寫入操作
* `createWriteStream`方法和`createReadStream`方法配合,可以實現拷貝大型文件