nodejs-fs文件操作

nodejs-fs 文件操作.

文件操作

文件操作可以使用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);
    }
});

更多操作參考菜鳥教程.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章