2015-10-29 187 views
19

我想創建一個簡單的日誌系統,它使用Node.js在過去的行之前打印一行到一個txt文件中,但我不知道如何從文件系統Node.js的作品。有人可以解釋嗎?Node.js將一行寫入.txt文件

+0

所以,你要插入一行到中間一個文本文件,對吧?最後添加字符串會更容易。 –

+0

是的,好的,我怎麼能在最後追加一個字符串? – Meterion

+0

[如何附加到Node中的文件?]可能的重複(http://stackoverflow.com/questions/3459476/how-to-append-to-a-file-in-node) –

回答

48

將數據插入文本文件的中間並不是一件簡單的工作。如果可能的話,你應該把它追加到文件的末尾。

追加數據的一些文本文件,最簡單的方法是從fs module使用內置的fs.appendFile(filename, data[, options], callback) function

var fs = require('fs') 
fs.appendFile('log.txt', 'new data', function (err) { 
    if (err) { 
    // append failed 
    } else { 
    // done 
    } 
}) 

但是如果你想將數據寫入日誌文件幾次,那麼這將是最好的使用fs.createWriteStream(path[, options]) function代替:

var fs = require('fs') 
var logger = fs.createWriteStream('log.txt', { 
    flags: 'a' // 'a' means appending (old data will be preserved) 
}) 

logger.write('some data') // append string to your file 
logger.write('more data') // again 
logger.write('and more') // again 

節點將繼續追加新的數據,每次你會打電話給.write時間您的文件,直到你的應用程序將被關閉,或者直到你手動關閉流CAL林志玲.end

logger.end() // close string 
+0

有必要保存文件 ?如果我使用fs.appendFile,那麼文件仍然是空的? – Meterion

+0

'appendFile'會打開文本文件,追加新數據,然後保存。所以,不,你不需要自己保存。它的文件是空的,請嘗試檢查'appendFile'回調中的'err'。 –

+0

感謝您提及一次和多次選項。 –

1

只需使用fs模塊是這樣的:

fs.appendFile('server.log', 'string to append', function (err) { 
    if (err) return console.log(err); 
    console.log('Appended!'); 
}); 
0

如果你想實現一個日誌系統,我建議你看一看Bunyan包。

1

步驟1

如果你有一個小文件 讀取到內存中

步驟2

轉換文件中的數據字符串轉換成數組

所有文件數據第3步

搜索陣列找到一個位置,你要插入文本

步驟4

一旦你的位置插入文本

yourArray.splice(index,0,"new added test"); 

步驟5

將你的數組轉換爲字符串

yourArray.join(""); 

步驟6

寫你的文件,像這樣

fs.createWriteStream(yourArray); 

如果您的文件過大這是不建議