etc./StackOverFlow

Node.js에서 파일 쓰기

청렴결백한 만능 재주꾼 2021. 12. 29. 03:38
반응형

질문자 :Gjorgji


Node.js를 사용할 때 파일에 쓰는 방법을 찾으려고 노력했지만 성공하지 못했습니다. 어떻게 할 수 있습니까?



파일 시스템 API 에는 많은 세부 정보가 있습니다. 가장 일반적인 방법은 다음과 같습니다.

 const fs = require('fs'); fs.writeFile("/tmp/test", "Hey there!", function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); }); // Or fs.writeFileSync('/tmp/test-sync', 'Hey there!');

Brian McKenna

현재 파일을 작성하는 세 가지 방법이 있습니다.

  1. fs.write(fd, buffer, offset, length, position, callback )

    버퍼가 디스크에 기록되었는지 확인하려면 콜백을 기다려야 합니다. 버퍼링되지 않습니다.

  2. fs.writeFile(filename, data, [encoding], callback)

    모든 데이터는 동시에 저장되어야 합니다. 순차 쓰기를 수행할 수 없습니다.

  3. fs.createWriteStream(path, [options] )

    콜백을 기다릴 필요가 없기 때문에 편리한 WriteStream 만듭니다. 그러나 다시 버퍼링되지 않습니다.

이름에서 알 수 있듯이 WriteStream 스트림은 정의상 한 방향(소스 ► 목적지)으로 이동하는 데이터를 포함하는 "버퍼"입니다. 그러나 쓰기 가능한 스트림이 반드시 "버퍼링"되는 것은 아닙니다. n 번 쓸 때 "버퍼링"되고 시간 n+1 에서 스트림이 버퍼를 커널로 보냅니다(이 가득 차서 플러시해야 하기 때문에).

즉, "버퍼"가 객체입니다. "버퍼링"되었는지 여부는 해당 개체의 속성입니다.

코드를 보면 WriteStream 은 쓰기 가능한 Stream 개체에서 상속됩니다. 주의를 기울이면 콘텐츠가 어떻게 플러시되는지 알 수 있습니다. 버퍼링 시스템이 없습니다.

문자열을 작성하면 버퍼로 변환된 다음 기본 계층으로 전송되어 디스크에 기록됩니다. 문자열을 작성할 때 버퍼를 채우지 않습니다. 따라서 다음을 수행하면:

 write("a") write("b") write("c")

당신이하고있는 일 :

 fs.write(new Buffer("a")) fs.write(new Buffer("b")) fs.write(new Buffer("c"))

I/O 계층에 대한 세 번의 호출입니다. "버퍼"를 사용하고 있지만 데이터는 버퍼링되지 않습니다. 버퍼링된 스트림은 fs.write(new Buffer ("abc")) , I/O 계층에 대한 한 번의 호출을 수행합니다.

지금 현재, Node.js를 v0.12에서 (안정 버전이 2015년 2월 6일을 발표했다) 이제 두 가지 기능을 지원 cork()uncork() . 이러한 기능을 통해 마침내 쓰기 호출을 버퍼링/플러시할 수 있을 것 같습니다.

예를 들어 Java에는 버퍼링된 스트림( BufferedOutputStream , BufferedWriter ...)을 제공하는 일부 클래스가 있습니다. 3바이트를 쓰면 이 바이트는 3바이트에 대해서만 I/O 호출을 수행하는 대신 버퍼(메모리)에 저장됩니다. 버퍼가 가득 차면 콘텐츠가 플러시되고 디스크에 저장됩니다. 이렇게 하면 성능이 향상됩니다.

나는 아무 것도 발견하지 않고 디스크 액세스를 수행하는 방법을 기억하고 있습니다.


Community Wiki

물론 조금 더 고급스럽게 만들 수도 있습니다. 전체 파일을 한 번에 쓰지 않는 비차단, 비트 및 조각 쓰기:

 var fs = require('fs'); var stream = fs.createWriteStream("my_file.txt"); stream.once('open', function(fd) { stream.write("My first row\n"); stream.write("My second row\n"); stream.end(); });

Fredrik Andersson

동기 쓰기

fs.writeFileSync(파일, 데이터[, 옵션])

 fs = require('fs'); fs.writeFileSync("foo.txt", "bar");

비동기 쓰기

fs.writeFile(파일, 데이터[, 옵션], 콜백)

 fs = require('fs'); fs.writeFile('foo.txt', 'bar', (err) => { if (err) throw err; });

어디에

 file <string> | <Buffer> | <URL> | <integer> filename or file descriptor data <string> | <Buffer> | <Uint8Array> options <Object> | <string> callback <Function>

공식 파일 시스템(fs) 문서를 읽을 가치가 있습니다.

업데이트: 비동기/대기

 fs = require('fs'); util = require('util'); writeFile = util.promisify(fs.writeFile); fn = async () => { await writeFile('foo.txt', 'bar'); } fn()

Moriarty

var path = 'public/uploads/file.txt', buffer = new Buffer("some content\n"); fs.open(path, 'w', function(err, fd) { if (err) { throw 'error opening file: ' + err; } fs.write(fd, buffer, 0, buffer.length, null, function(err) { if (err) throw 'error writing file: ' + err; fs.close(fd, function() { console.log('file written'); }) }); });

Mister P

제공된 답변은 날짜가 있으며 이를 수행하는 더 새로운 방법은 다음과 같습니다.

 const fsPromises = require('fs').promises await fsPromises.writeFile('/path/to/file.txt', 'data to write')

자세한 내용은 여기에서 문서를 참조하십시오


TrevTheDev

나는 Index of ./articles/file-system 을 좋아했습니다.

그것은 나를 위해 일했습니다.

node.js에 파일을 작성하는 방법 도 참조하십시오. .

 fs = require('fs'); fs.writeFile('helloworld.txt', 'Hello World!', function (err) { if (err) return console.log(err); console.log('Wrote Hello World in file helloworld.txt, just check it'); });

helloworld.txt의 내용:

 Hello World!

업데이트:
Linux 노드 write in current directory 에서와 같이 다른 일부에서는 그렇지 않은 것 같으므로 만일을 대비하여 이 주석을 추가합니다.
ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH); 파일이 작성된 위치를 가져옵니다.


Sérgio

"쓰기"에 대한 질문을 알고 있지만 보다 일반적인 의미에서 "추가"는 루프에서 사용하여 파일에 텍스트를 추가하기 쉽기 때문에(파일의 존재 여부에 관계없이) 경우에 따라 유용할 수 있습니다. 줄을 추가하려면 "\n"을 사용하십시오. 예:

 var fs = require('fs'); for (var i=0; i<10; i++){ fs.appendFileSync("junk.csv", "Line:"+i+"\n"); }

Astra Bear

OK, Node에는 이를 위한 내장 기능이 있으므로 매우 간단합니다. fs 라고 하는 파일 시스템 과 기본적으로 NodeJS 파일 시스템 모듈을 의미합니다 ...

따라서 먼저 server.js 파일에서 다음과 같이 요구합니다.

 var fs = require('fs');

fs 에는 파일에 쓰는 방법이 거의 없지만 내가 선호하는 방법은 appendFile 사용하는 것입니다. 이렇게 하면 파일에 내용이 추가되고 파일이 없으면 파일이 생성됩니다. 코드는 다음과 같을 수 있습니다.

 fs.appendFile('myFile.txt', 'Hi Ali!', function (err) { if (err) throw err; console.log('Thanks, It\'s saved to the file!'); });

Alireza

fs (파일 시스템) 모듈을 사용하여 파일에 쓸 수 있습니다.

다음은 이를 수행하는 방법의 예입니다.

 const fs = require('fs'); const writeToFile = (fileName, callback) => { fs.open(fileName, 'wx', (error, fileDescriptor) => { if (!error && fileDescriptor) { // Do something with the file here ... fs.writeFile(fileDescriptor, newData, (error) => { if (!error) { fs.close(fileDescriptor, (error) => { if (!error) { callback(false); } else { callback('Error closing the file'); } }); } else { callback('Error writing to new file'); } }); } else { callback('Could not create new file, it may already exists'); } }); };

Promisesasync / await 문을 사용하여 이 콜백 내부 콜백 코드 구조를 제거할 수도 있습니다. 이렇게 하면 비동기 코드 구조가 훨씬 더 평평해집니다. 이를 위해 편리한 util.promisify(original) 기능이 활용될 수 있습니다. 콜백에서 약속으로 전환할 수 있습니다. 아래의 fs 함수가 있는 예를 살펴보십시오.

 // Dependencies. const util = require('util'); const fs = require('fs'); // Promisify "error-back" functions. const fsOpen = util.promisify(fs.open); const fsWrite = util.promisify(fs.writeFile); const fsClose = util.promisify(fs.close); // Now we may create 'async' function with 'await's. async function doSomethingWithFile(fileName) { const fileDescriptor = await fsOpen(fileName, 'wx'); // Do something with the file here... await fsWrite(fileDescriptor, newData); await fsClose(fileDescriptor); }

Oleksii Trekhleb

 var fs = require('fs'); fs.writeFile(path + "\\message.txt", "Hello", function(err){ if (err) throw err; console.log("success"); });

예: 파일을 읽고 다른 파일에 쓰기:

 var fs = require('fs'); var path = process.cwd(); fs.readFile(path+"\\from.txt",function(err,data) { if(err) console.log(err) else { fs.writeFile(path+"\\to.text",function(erro){ if(erro) console.log("error : "+erro); else console.log("success"); }); } });

Masoud Siahkali

여기에서 우리는 읽기/쓰기 작업에 w+를 사용하고 파일 경로를 찾지 못하면 자동으로 생성됩니다.

 fs.open(path, 'w+', function(err, data) { if (err) { console.log("ERROR !! " + err); } else { fs.write(data, 'content', 0, 'content length', null, function(err) { if (err) console.log("ERROR !! " + err); fs.close(data, function() { console.log('written success'); }) }); } });

내용은 파일에 기록해야 하는 내용과 그 길이인 'content.length'를 의미합니다.


Gunjan Patel

다음은 로컬에서 csv 파일을 읽고 csv 파일을 로컬에 쓰는 방법의 샘플입니다.

 var csvjson = require('csvjson'), fs = require('fs'), mongodb = require('mongodb'), MongoClient = mongodb.MongoClient, mongoDSN = 'mongodb://localhost:27017/test', collection; function uploadcsvModule(){ var data = fs.readFileSync( '/home/limitless/Downloads/orders_sample.csv', { encoding : 'utf8'}); var importOptions = { delimiter : ',', // optional quote : '"' // optional },ExportOptions = { delimiter : ",", wrap : false } var myobj = csvjson.toSchemaObject(data, importOptions) var exportArr = [], importArr = []; myobj.forEach(d=>{ if(d.orderId==undefined || d.orderId=='') { exportArr.push(d) } else { importArr.push(d) } }) var csv = csvjson.toCSV(exportArr, ExportOptions); MongoClient.connect(mongoDSN, function(error, db) { collection = db.collection("orders") collection.insertMany(importArr, function(err,result){ fs.writeFile('/home/limitless/Downloads/orders_sample1.csv', csv, { encoding : 'utf8'}); db.close(); }); }) } uploadcsvModule()

KARTHIKEYAN.A

fs.createWriteStream(path[,options])

options 에는 파일 시작 이후의 특정 위치에 데이터 쓰기를 허용 start 옵션도 포함될 수 있습니다. 파일을 교체하지 않고 수정하려면 기본 모드 w r+ flags 모드가 필요할 수 있습니다. 인코딩은 Buffer에서 허용하는 것 중 하나일 수 있습니다.

autoClose 'error' 또는 'finish' 시 true(기본 동작)로 설정되면 파일 설명자가 자동으로 닫힙니다. autoClose 가 false이면 오류가 있더라도 파일 설명자가 닫히지 않습니다. 응용 프로그램을 닫고 파일 설명자 누출이 없는지 확인하는 것은 응용 프로그램의 책임입니다.

ReadStream 과 마찬가지로 fd 가 지정되면 WriteStream path 인수를 무시하고 지정된 파일 설명자를 사용합니다. 'open' 이벤트가 발생하지 않음을 의미합니다. fd 가 차단되어야 합니다. 비차단 fd 는 net.Socket 에 전달되어야 합니다.

options 가 문자열이면 인코딩을 지정합니다.

이 긴 기사를 읽은 후. 작동 방식을 이해해야 합니다. 여기 createWriteStream() 의 예가 있습니다.

 /* The fs.createWriteStream() returns an (WritableStream {aka} internal.Writeable) and we want the encoding as 'utf'-8 */ /* The WriteableStream has the method write() */ fs.createWriteStream('out.txt', 'utf-8') .write('hello world');

user9258013

easy-file-manager 사용할 수 있습니다.

npm에서 먼저 설치 npm install easy-file-manager

파일 업로드 및 제거 샘플

 var filemanager = require('easy-file-manager') var path = "/public" var filename = "test.jpg" var data; // buffered image filemanager.upload(path,filename,data,function(err){ if (err) console.log(err); }); filemanager.remove(path,"aa,filename,function(isSuccess){ if (err) console.log(err); });

Christoper

스트림을 사용하여 파일에 쓸 수 있습니다.

다음과 같이 하십시오.

 const fs = require('fs'); const stream = fs.createWriteStream('./test.txt'); stream.write("Example text");

Predrag Davidovic

포인트 1:

파일에 무언가를 쓰고 싶다면. 의미: 파일에 이미 저장된 모든 것을 제거하고 새 내용을 씁니다. fs.promises.writeFile() 사용

포인트 2:

파일에 무언가를 추가하려는 경우. 의미: 파일에 이미 저장된 항목을 제거하지 않고 파일 내용에 새 항목을 추가합니다. 그런 다음 먼저 파일을 읽은 다음 읽을 수 있는 값에 내용을 추가한 다음 파일에 씁니다. 따라서 fs.promises.readFile 및 fs.promises.writeFile()을 사용하십시오.


예 1: JSON 파일에 JSON 객체를 작성하고 싶습니다.

 const fs = require('fs'); const data = {table:[{id: 1, name: 'my name'}]} const file_path = './my_data.json' writeFile(file_path, data) async function writeFile(filename, writedata) { try { await fs.promises.writeFile(filename, JSON.stringify(writedata, null, 4), 'utf8'); console.log('data is written successfully in the file') } catch (err) { console.log('not able to write data in the file ') } }

example2 : JSON 파일에 데이터를 추가하려는 경우. 동일한 폴더 루트에 있는 my_data.json 파일에 {id:1, name:'my name'} 데이터를 추가하려고 합니다. append_data(file_path, data) 함수를 호출하기만 하면 됩니다.

파일이 존재하는 경우 JSON 파일에 데이터를 추가합니다. 또는 파일을 만들고 데이터를 추가합니다.

 const fs = require('fs'); const data = {id: 2, name: 'your name'} const file_path = './my_data.json' append_data(file_path, data) async function append_data(filename, data) { if (fs.existsSync(filename)) { var read_data = await readFile(filename) if (read_data == false) { console.log('not able to read file') } else { read_data.table.push(data) //data must have the table array in it like example 1 var dataWrittenStatus = await writeFile(filename, read_data) if (dataWrittenStatus == true) { console.log('data added successfully') } else { console.log('data adding failed') } } } } async function readFile(filePath) { try { const data = await fs.promises.readFile(filePath, 'utf8') return JSON.parse(data) } catch (err) { return false; } } async function writeFile(filename, writedata) { try { await fs.promises.writeFile(filename, JSON.stringify(writedata, null, 4), 'utf8'); return true } catch (err) { return false } }

subhadip pahari

포인트 1:

파일에 무언가를 쓰고 싶다면. 의미: 파일에 이미 저장된 모든 것을 제거하고 새 내용을 씁니다. fs.promises.writeFile() 사용

포인트 2:

파일에 무언가를 추가하려는 경우. 의미: 파일에 이미 저장된 항목을 제거하지 않고 파일 내용에 새 항목을 추가합니다. 그런 다음 먼저 파일을 읽은 다음 읽을 수 있는 값에 내용을 추가한 다음 파일에 씁니다. 따라서 fs.promises.readFile 및 fs.promises.writeFile()을 사용하십시오.


예 1: JSON 파일에 JSON 객체를 작성하고 싶습니다.

 const fs = require('fs');

writeFile (파일 이름, 쓰기 데이터) 비동기 함수 writeFile (파일 이름, 쓰기 데이터) { 시도 { 대기 fs.promises.writeFile(파일 이름, JSON.stringify(writedata, null, 4), 'utf8'); 반환 true } catch(err) { 반환 false } }


subhadip pahari

다음 코드 예제를 통해 파일에 쓸 수 있습니다.

 var data = [{ 'test': '123', 'test2': 'Lorem Ipsem ' }]; fs.open(datapath + '/data/topplayers.json', 'wx', function (error, fileDescriptor) { if (!error && fileDescriptor) { var stringData = JSON.stringify(data); fs.writeFile(fileDescriptor, stringData, function (error) { if (!error) { fs.close(fileDescriptor, function (error) { if (!error) { callback(false); } else { callback('Error in close file'); } }); } else { callback('Error in writing file.'); } }); } });

Mudassir

출처 : http:www.stackoverflow.com/questions/2496710/writing-files-in-node-js

반응형