node基礎-文件系統-文件寫操作


文件操作頻率最高的就是讀跟寫。nodejs的文件的讀取API在《node基礎-文件系統-讀取文件》里已經簡單介紹過,本文就簡單介紹下nodejs的文件寫API。

nodejs的文件操作均提供了同步、異步兩種方式,寫操作也是同樣的,常用的兩個接口為fs.writeFile(異步)、fs.writeFileSync(同步),下面就來看看他們的使用以及區別。

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

先來看下API說明

/**
 * 往文件里異步寫數據,寫入的內容可以是字符串,也可以是二進制數據。
 * 如果文件不存在,則創建;如果文件已存在,那么內容會被覆蓋
 * @param {String} filename 文件名
 * @param {String|Buffer} data 要往文件里寫的內容,可以是字符串,也可以是二進制數據。當為二進制數據時候,options.encoding 會被忽略
 * @param {Object} [options]
 * @param {String} options.encoding 編碼,默認是utf8
 * @param {Number} options.mode=438 模式
 * @param {String} options.flag=w 寫文件的模式
 * @param {Function} callback 回調方法
 */
fs.writeFile(filename, data, [options], callback)

接下來我們來看看實際例子,首先,需要引入fs,下面為節省篇幅就不再貼這行代碼了

var fs = require('fs');

 

例子一:往不存在的文件里寫內容

往一個不存在的文件里寫內容,則會先創建該文件,再往里面寫內容

var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
fs.writeFile(noneExistFileName, '文件不存在,則創建', function(err){
    if(err) throw err;
    console.log(noneExistFileName+'不存在,被創建了!');
});

 

例子二:往存在的文件里寫內容

如果該文件已存在,則原有文件內容會北覆蓋

fs.writeFile('async_exists.txt', '文件已存在,則覆蓋內容 -- '+(new Date()-0), function(err){
    if(err) throw err;
    console.log('exists.txt已存在,內容被覆蓋!');
});

 

例子三:往已經存在的文件里追加內容

options.flag 設置為 'a' 時,則會將寫模式變為追加內容

fs.writeFile('async_add.txt', '\n文件已存在,並追加內容 -- '+(new Date()-0), {
    flag: 'a'
}, function(err){
    if(err) throw err;
    console.log('exists.txt已存在,內容被覆蓋!');
});

 

 fs.writeFileSync(filename, data, [options])

寫文件的同步版本,同樣先來看下API說明,你會發現跟fs.writeFile 沒啥區別,就是少了個回調

/**
 * 文件同步寫接口,是fs.writeFile的同步版本,參數也差不多
 * @param {String} filename 文件名
 * @param {String|Buffer} data 要往文件里寫的內容,可以是字符串,也可以是二進制數據。當為二進制數據時候,options.encoding 會被忽略
 * @param {Object} [options]
 * @param {String} options.encoding 編碼,默認是utf8
 * @param {Number} options.mode=438 模式
 * @param {String} options.flag=w 寫文件的模式
 */
fs.writeFileSync(filename, data, [options])

下面我們看下具體例子

 

例子一:往不存在的文件里寫內容,則創建該文件

// case 1:往不存在的文件里寫內容,則創建該文件
var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
fs.writeFile(noneExistFileName, '文件不存在,則創建');

 

例子二:往存在的文件里寫內容,原有內容被覆蓋

fs.writeFile('sync_exists.txt', '文件已存在,則覆蓋內容 -- '+(new Date()-0));

 

例子三:往已經存在的文件里追加內容

fs.writeFile('sync_add.txt', '\n文件已存在,並追加內容 -- '+(new Date()-0), {
    flag: 'a'
});

 

完整示例

demo下載請點擊,將代碼隨便解壓縮到任意目錄下,然后在該目錄下運行命令 node writefile.js 即可

/**
 * 文件寫入demo,by 程序猿小卡
 */
var fs = require('fs');

/**
 * 往文件里異步寫數據,寫入的內容可以是字符串,也可以是二進制數據。
 * 如果文件不存在,則創建;如果文件已存在,那么內容會被覆蓋
 * @param {String} filename 文件名
 * @param {String|Buffer} data 要往文件里寫的內容,可以是字符串,也可以是二進制數據。當為二進制數據時候,options.encoding 會被忽略
 * @param {Object} [options]
 * @param {String} options.encoding 編碼,默認是utf8
 * @param {Number} options.mode=438 模式
 * @param {String} options.flag=w 寫文件的模式
 * @param {Function} callback 回調方法
 */
// fs.writeFile(filename, data, [options], callback)

// case 1:往不存在的文件里寫內容,則創建該文件
var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
fs.writeFile(noneExistFileName, '文件不存在,則創建', function(err){
    if(err) throw err;
    console.log(noneExistFileName+'不存在,被創建了!');
});

// case 2:往存在的文件里寫內容,原有內容被覆蓋
fs.writeFile('async_exists.txt', '文件已存在,則覆蓋內容 -- '+(new Date()-0), function(err){
    if(err) throw err;
    console.log('exists.txt已存在,內容被覆蓋!');
});

// case 3:往已經存在的文件里追加內容
fs.writeFile('async_add.txt', '\n文件已存在,並追加內容 -- '+(new Date()-0), {
    flag: 'a'
}, function(err){
    if(err) throw err;
    console.log('exists.txt已存在,內容被覆蓋!');
});

/**
 * 文件同步寫接口,是fs.writeFile的同步版本,參數也差不多
 * @param {String} filename 文件名
 * @param {String|Buffer} data 要往文件里寫的內容,可以是字符串,也可以是二進制數據。當為二進制數據時候,options.encoding 會被忽略
 * @param {Object} [options]
 * @param {String} options.encoding 編碼,默認是utf8
 * @param {Number} options.mode=438 模式
 * @param {String} options.flag=w 寫文件的模式
 */
// fs.writeFileSync(filename, data, [options])

// case 1:往不存在的文件里寫內容,則創建該文件
var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
fs.writeFile(noneExistFileName, '文件不存在,則創建');

// case 2:往存在的文件里寫內容,原有內容被覆蓋
fs.writeFile('sync_exists.txt', '文件已存在,則覆蓋內容 -- '+(new Date()-0));

// case 3:往已經存在的文件里追加內容
fs.writeFile('sync_add.txt', '\n文件已存在,並追加內容 -- '+(new Date()-0), {
    flag: 'a'
});

 

寫在后面

官方文檔請點擊 

本文如有錯漏,請指出 :)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM