Node.js Записать строку в файл.txt
Я хочу создать простую систему журналов, которая печатает строку перед предыдущей строкой в текстовый файл с помощью Node.js, но я не знаю, как работает файловая система из Node.js. Может кто-нибудь объяснить это?
4 ответа
Вставка данных в середину текстового файла не простая задача. Если возможно, вы должны добавить его в конец вашего файла.
Самый простой способ добавить данные в какой-либо текстовый файл - использовать встроенный fs.appendFile(filename, data[, options], callback)
функция от fs
модуль:
var fs = require('fs')
fs.appendFile('log.txt', 'new data', function (err) {
if (err) {
// append failed
} else {
// done
}
})
Но если вы хотите записать данные в файл журнала несколько раз, то лучше всего использовать fs.createWriteStream(path[, options])
функция вместо:
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
До тех пор, пока ваше приложение не будет закрыто или пока вы не закроете поток вручную .end
:
logger.end() // close string
Просто использовать fs
модуль и как то так:
fs.appendFile('server.log', 'string to append', function (err) {
if (err) return console.log(err);
console.log('Appended!');
});
Шаг 1
Если у вас небольшой файл, прочитайте все данные файла в память
Шаг 2
Преобразовать строку данных файла в массив
Шаг 3
Поиск в массиве, чтобы найти место, куда вы хотите вставить текст
Шаг 4
Как только у вас есть местоположение, вставьте свой текст
yourArray.splice(index,0,"new added test");
Шаг 5
преобразовать ваш массив в строку
yourArray.join("");
Шаг 6
напиши свой файл так
fs.createWriteStream(yourArray);
Это не рекомендуется, если ваш файл слишком большой
Я сделал файл журнала, который печатает данные в текстовый файл, используя журнал "Уинстон". Исходный код здесь ниже,
const { createLogger, format, transports } = require('winston');
var fs = require('fs')
var logger = fs.createWriteStream('Data Log.txt', {`
flags: 'a'
})
const os = require('os');
var sleep = require('system-sleep');
var endOfLine = require('os').EOL;
var t = ' ';var s = ' ';var q = ' ';
var array1=[];
var array2=[];
var array3=[];
var array4=[];
array1[0] = 78;`
array1[1] = 56;
array1[2] = 24;
array1[3] = 34;
for (var n=0;n<4;n++)
{
array2[n]=array1[n].toString();
}
for (var k=0;k<4;k++)
{
array3[k]=Buffer.from(' ');
}
for (var a=0;a<4;a++)
{
array4[a]=Buffer.from(array2[a]);
}
for (m=0;m<4;m++)
{
array4[m].copy(array3[m],0);
}
logger.write('Date'+q);
logger.write('Time'+(q+' '))
logger.write('Data 01'+t);
logger.write('Data 02'+t);
logger.write('Data 03'+t);
logger.write('Data 04'+t)
logger.write(endOfLine);
logger.write(endOfLine);
enter code here`enter code here`
}
function mydata() //user defined function
{
logger.write(datechar+s);
logger.write(timechar+s);
for ( n = 0; n < 4; n++)
{
logger.write(array3[n]);
}
logger.write(endOfLine);
}
for (;;)
}
var now = new Date();
var dateFormat = require('dateformat');
var date = dateFormat(now,"isoDate");
var time = dateFormat(now, "h:MM:ss TT ");
var datechar = date.toString();
var timechar = time.toString();
mydata();
sleep(5*1000);
}