文件操作
文件操作可以使用nodejs的內置 fs
模塊實現。
並且所有文件系統操作都具有同步和異步的形式。
讀取文件
讀取文件內容的函數有異步的 fs.readFile() 和同步的 fs.readFileSync()。
發現同步跟異步的方法名就是後面相差一個Sync。其他文件的同步異步操作亦如此。
const fs = require("fs");
// 第一個參數爲文件路徑,第二個參數爲回調函數。
// error是讀取出錯的異常,如果沒有出錯,則error爲undifine。
// data 爲文件的數據。
fs.readFile("test", (error, data) => {
if (error) {
console.log(error);
} else {
console.log(`異步讀取:${data.toString()}`);
}
});
// 同步讀取,要try,catch下,捕獲異常。
try {
const data = fs.readFileSync("test");
console.log(`同步讀取:${data.toString()}`);
} catch (e) {
console.log(e);
}
/*
同步讀取:hahaha
異步讀取:hahaha
*/
以上可以看出,雖然異步讀取代碼寫在前面,但是實際上,同步讀取先進行,因爲異步讀取並沒阻塞線程。
文件寫入
異步模式下寫入語法爲:
fs.writeFile(file, data[, options], callback)
- file - 文件名或文件描述符。
- data - 要寫入文件的數據,可以是 String(字符串) 或 Buffer(緩衝) 對象。
- options - 該參數是一個對象,包含 {encoding, mode, flag}。默認編碼爲 utf8, 模式爲 0666 , flag 爲 ‘w’
- callback - 回調函數,回調函數只包含錯誤信息參數(err),在寫入失敗時返回。
例如:
const fs = require('fs');
fs.writeFile("write-file","123456", error=>{
if (error){
console.log(error);
}else{
const data = fs.readFileSync('write-file');
console.log(data.toString());
}
});
/**
123456
*/
先寫入文件,然後讀取出來.
獲取文件信息
異步獲取文件信息語法:
fs.stat(path, callback)
例如:
const fs = require("fs");
fs.stat(`test`,(error,stats)=>{
if (error) {
console.log(error);
}else{
console.log(stats);
}
});
/*
Stats {
dev: 2066,
mode: 33204,
nlink: 1,
uid: 1000,
gid: 1000,
rdev: 0,
blksize: 4096,
ino: 13910026,
size: 6,
blocks: 8,
atimeMs: 1569741090778.4666,
mtimeMs: 1569741090466.4666,
ctimeMs: 1569741090466.4666,
birthtimeMs: 1569741090466.4666,
atime: 2019-09-29T07:11:30.778Z,
mtime: 2019-09-29T07:11:30.466Z,
ctime: 2019-09-29T07:11:30.466Z,
birthtime: 2019-09-29T07:11:30.466Z }
*/
stats類包含了文件的各種信息,還提供了有用的方法:如
const fs = require("fs");
fs.stat(`test`,(error,stats)=>{
if (error) {
console.log(error);
}else{
console.log(stats.isFile()); // true
console.log(stats.isDirectory()); // false
}
});
文件的刪除
unlink:異步刪除文件
const fs = require('fs');
fs.unlink('./test.txt',err=>{
if (err) {
console.log(err.message);
}else{
console.log(`刪除成功!`);
}
});
// => 刪除成功!
同步刪除文件
使用同步的操作發生的異常會立即拋出,可以使用 try…catch
處理,也可以允許冒泡。
const fs = require('fs');
try {
fs.unlinkSync('/tmp/hello');
console.log('已成功刪除 /tmp/hello');
} catch (err) {
// 處理錯誤
}
注意:使用異步的方法時無法保證順序。 因此,對同一個文件的操作容易出錯。
創建目錄
語法:
fs.mkdir(path[,options],callback)
參數
參數使用說明如下:
- path - 文件路徑。
- options 參數可以是:
- recursive - 是否以遞歸的方式創建目錄,默認爲 false。
- mode - 設置目錄權限,默認爲 0777。
- callback - 回調函數,沒有參數。
例如:
const fs = require("fs");
fs.mkdir('dir',error=>{
if (error) {
console.log(error);
}else{
console.log(`創建目錄成功!`);
}
});
如果目錄存在則會出錯,如果想要不管目錄是否存在可以添加 recursive: true.
const fs = require("fs");
fs.mkdir('dir',{recursive: true},error=>{
if (error) {
console.log(error);
}else{
console.log(`創建目錄成功!`);
}
});
讀取目錄
語法:
fs.readdir(path, callback)
參數
參數使用說明如下:
- path - 文件路徑。
- callback - 回調函數,回調函數帶有兩個參數err, files,err 爲錯誤信息,files 爲 目錄下的文件數組列表。
如,讀取根目錄(Linux系統):
const fs = require('fs');
fs.readdir('/',(error,files)=>{
if (error) {
console.log(error);
}else{
files.forEach(file=>{
console.log(file);
})
}
});
/*
bin
boot
cdrom
dev
etc
home
...
*/
刪除目錄
fs.rmdir(path, callback)
- path - 文件路徑。
- callback - 回調函數,error參數.
const fs = require('fs');
fs.rmdir("dir",error=>{
if (error) {
console.log(error);
}
});
更多操作參考菜鳥教程.