一.引入文件模塊:
const fs = require('fs');
所有的文件系統操作都有異步和同步兩種形式。
- 異步形式的最后一個參數都是完成時回調函數。傳給回調函數的參數取決於具體方法,但回調函數的第一個參數都會保留給異常。 如果操作成功完成,則第一個參數會是
null
或undefined
。
- 當使用同步操作時,任何異常都會被立即拋出,可以使用
try
/catch
來處理異常,或讓異常向上冒泡。
二.
fs
模塊常用的一些 API:
1.文件操作
(1)讀取文件readFile
let fs=require('fs'); //1.txt => Helloween fs.readFile('1.txt',function(err,data){ if(err){ console.log(err); }else{ console.log(data);//<Buffer 48 65 6c 6c 6f 77 65 65 6e> console.log(data.toString());//Helloween } });
注:buffer 內容是十六進制信息的 ASCII 碼,可以先轉換成十進制再對照ASCII表;當然,直接使用toString()轉換即可。
(2)寫入文件writeFile
fs.writeFile('2.txt', 'xxxxx', function(err){ if(err){ console.log(err); return; } });
注:文件對象存在則直接把內容寫入;文件對象不存在則會自動創建再寫入;且寫入的內容會直接覆蓋原有內容。
(3)追加文件appendFile: 會把內容往文件內的最后內容位置添加進去。
fs.appendFile('2.txt','\r\nhello world',function(err){ if(err){ console.log(err); return; } });
(4)刪除文件unlink
fs.unlink('2.txt', function(err){ if(err){ console.log(err); return; } });
(5)復制文件: fs.copyFile(src, dest[, flags], callback) 新增於: v8.5.0,記得查看node版本
fs.copyFile('1.txt','2.txt', function(err){
if(err){ console.log(err); return; } })
2.文件夾操作
(1)創建文件夾 mkdir
fs.mkdir('./public', function(err){ if(err){ console.log(err); return; } });
(2)刪除文件夾 rmdir
fs.rmdir('./public', function(err){ if(err){ console.log(err); return; } });
(3)讀取文件夾 readdir
fs.readdir('../test', function(err, data){ if(err){ console.log(err); }else{ console.log(data);//[ '1.txt', 'fs.js', 'project', 'server.js' ] } });
3.檢查文件或文件夾是否存在: fs.access() 、 fs.existsSync()
(1) fs.access(path[, mode], callback)
fs.access('./abc', fs.constants.F_OK, function(err){ if(err){ console.log(err); return; } console.log('存在') });
(2) fs.existsSync(path) 同步,不使用回調。如果路徑存在,則返回 true,否則返回 false。
var res = fs.existsSync('./abc'); console.log(res);//false
4. 獲取文件或文件夾狀態信息
(1)異步獲取狀態信息 fs.stat(path,callback):
回調有兩個參數 (err, stats) 其中 stats 是一個 fs.Stats 對象,可以用來檢查對象是文件stats.isFile()還是文件夾stats.isDirectory(),查看它的大小、創建時間、修改時間 ... ...
fs.stat('./1.txt', function(err, stats){ //回調有兩個參數 (err, stats) 其中 stats 是一個 fs.Stats 對象。 console.log(stats.isDirectory());//false console.log(stats.isFile());//true //查看文件的其他信息 console.log(stats); // Stats { // dev: 275776299, // mode: 33206, // nlink: 1, // uid: 0, // gid: 0, // rdev: 0, // blksize: undefined, // ino: 8444249301415788, // size: 9, // blocks: undefined, // atimeMs: 1526954051821.0154, // mtimeMs: 1526954068932.9944, // ctimeMs: 1526954068932.9944, // birthtimeMs: 1526954051821.0154, // atime: 2018-05-22T01:54:11.821Z, // mtime: 2018-05-22T01:54:28.933Z, // ctime: 2018-05-22T01:54:28.933Z, // birthtime: 2018-05-22T01:54:11.821Z // } });
(2)同步方式檢測狀態信息: fs.statSync(path)
var stats = fs.statSync('1.txt'); console.log(stats.isDirectory());//false console.log(stats.isFile());//true console.log(stats); // Stats { // dev: 275776299, // mode: 33206, // nlink: 1, // uid: 0, // gid: 0, // rdev: 0, // blksize: undefined, // ino: 8444249301415788, // size: 9, // blocks: undefined, // atimeMs: 1526954051821.0154, // mtimeMs: 1526954068932.9944, // ctimeMs: 1526954068932.9944, // birthtimeMs: 1526954051821.0154, // atime: 2018-05-22T01:54:11.821Z, // mtime: 2018-05-22T01:54:28.933Z, // ctime: 2018-05-22T01:54:28.933Z, // birthtime: 2018-05-22T01:54:11.821Z // }
5.文件或文件夾重命名:fs.rename(oldPath, newPath, callback)
fs.rename('1.txt','1.txt-bak', function(err){ if(err){ console.log(err); return; } })
6.fs操作實例