【node使用】fs模塊

以下是fs模塊常用方法,更多具體內容請參考官網:http://nodejs.cn/api/fs.html

// fs是node的核心模塊,無需安裝
const fs = require('fs');

fs.access(path[, mode], callback)

/** 
 * 測試用戶對 path 指定的文件或目錄的權限。
 * @param {String|Buffer} path 
 * @param {Integer} mode 默認值: fs.constants.F_OK
 * @param {Function} callback
 */
 
const file = 'package.json';

// 檢查當前目錄中是否存在該文件。
fs.access(file, fs.constants.F_OK, (err) => {
  console.log(`${file} ${err ? '不存在' : '存在'}`);
});

// 檢查文件是否可讀。
fs.access(file, fs.constants.R_OK, (err) => {
  console.log(`${file} ${err ? '不可讀' : '可讀'}`);
});

// 檢查文件是否可寫。
fs.access(file, fs.constants.W_OK, (err) => {
  console.log(`${file} ${err ? '不可寫' : '可寫'}`);
});

// 檢查當前目錄中是否存在該文件,以及該文件是否可寫。
fs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {
  if (err) {
    console.error(
      `${file} ${err.code === 'ENOENT' ? '不存在' : '只可讀'}`);
  } else {
    console.log(`${file} 存在,且它是可寫的`);
  }
});

不建議在調用 fs.open()、 fs.readFile() 或 fs.writeFile() 之前使用 fs.access() 檢查文件的可訪問性。 這樣做會引入競態條件,因爲其他進程可能會在兩個調用之間更改文件的狀態。 相反,應該直接打開、讀取或寫入文件,如果文件無法訪問則處理引發的錯誤。

fs.open(path, flags[, mode], callback)

/** 
 * 異步地打開文件。
 * @param {String|Buffer} path 
 * @param {String|Number} flags 參閱支持的文件系統標誌。
 * @param {integer} mode 0o666(可讀寫)。
 * @param {Function} callback
 * 		err 
 * 		fd 
 */

fs.readFile(path[, options], callback)

/** 
 * 異步地讀取文件的全部內容。
 * @param {String|Buffer} path 文件名或文件描述符。
 * @param {Object|String} options
 * 		encoding 默認值: null
 * 		flag 參閱支持的文件系統標誌。默認值: 'r'
 * @param {Function} callback
 * 		err 
 * 		data 文件的內容
 */
 
fs.readFile('/etc/passwd', (err, data) => {
    if (err) throw err;
    console.log(data);
});

fs.writeFile(file, data[, options], callback)

/** 
 * 異步地將數據寫入到一個文件,如果文件已存在則覆蓋該文件。
 * @param {String|Buffer|URL|integer} file 文件名或文件描述符。
 * @param {String|Buffer|TypedArray|DataView} data
 * @param {Object|String} options
 * 		encoding 默認值: null
 * 		mode 默認值: 0o666
 * 		flag 參閱支持的文件系統標誌。默認值: 'r'
 * @param {Function} callback
 * 		err 
 */

const data = new Uint8Array(Buffer.from('Node.js中文網'));
fs.writeFile('文件.txt', data, (err) => {
    if (err) throw err;
    console.log('文件已被保存');
});

fs.appendFile(path, data[, options], callback)

/** 
 * 異步地將數據追加到文件,如果文件尚不存在則創建該文件。 data 可以是字符串或 Buffer
 * @param {String|Buffer} path 文件名或文件描述符
 * @param {String|Buffer} data
 * @param {Object|String} options
 * 		encoding 默認值: 'utf8'
 * 		mode 默認值: 0o666
 * 		flag 參閱支持的文件系統標誌。默認值: 'a'
 * @param {Function} callback
 */
 
fs.appendFile('message.txt', '追加的數據', (err) => {
  if (err) throw err;
  console.log('數據已追加到文件');
});

// 如果 options 是字符串,則它指定字符編碼:
fs.appendFile('message.txt', '追加的數據', 'utf8', callback);

// path 可以指定爲已打開用於追加(使用 fs.open() 或 fs.openSync())的數字型文件描述符。 文件描述符不會自動關閉。
fs.open('message.txt', 'a', (err, fd) => {
    if (err) throw err;
    fs.appendFile(fd, '追加的數據', 'utf8', (err) => {
        fs.close(fd, (err) => {
            if (err) throw err;
        });
        if (err) throw err;
    });
});

fs.mkdir(path[, options], callback)

/** 
 * 異步地創建目錄。 除了可能的異常,完成回調沒有其他參數。
 * @param {String|Buffer} path 
 * @param {Object|integer} options
 * 		recursive 是否應創建父文件夾 默認值: false
 * 		mode 默認值: 0o777
 * @param {Function} callback
 */
 
// 創建 /tmp/a/apple 目錄,無論是否存在 /tmp 和 /tmp/a 目錄。
fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
  if (err) throw err;
});

.

系列文章

【node使用】發佈一個自己的npm包
【node使用】搭建一個web服務器
【node使用】package.json詳解以及package-lock.json的作用
【node使用】path模塊
【node使用】glob匹配模式
【node使用】fs模塊
【node使用】實現console輸出不同顏色

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