1911

Node.js を使用しているときにファイルに書き込む方法を見つけようとしましたが、成功しませんでした。どうやってやるの?

4

19 に答える 19

2803

File System 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!');
于 2010-03-23T01:50:15.540 に答える
594

現在、ファイルを書き込むには 3 つの方法があります。

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

    バッファがディスクに書き込まれることを確認するには、コールバックを待つ必要があります。バッファリングされていません。

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

    すべてのデータは同時に保存する必要があります。順次書き込みは実行できません。

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

    コールWriteStreamバックを待つ必要がないので便利です。しかし、繰り返しますが、バッファリングされていません。

名前が示すように、 AWriteStreamはストリームです。定義上、ストリームは一方向 (ソース ► 宛先) に移動するデータを含む「バッファ」です。しかし、書き込み可能なストリームは必ずしも「バッファリング」されているわけではありません。timeを書き込むと、ストリームは「バッファリング」さnれ、timen+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 レイヤーへの3 つの呼び出しです。「バッファ」を使用していますが、データはバッファリングされません。バッファリングされたストリームは次のことを行います: fs.write(new Buffer ("abc"))、I/O レイヤーへの 1 回の呼び出し。

現在、Node.js v0.12 (2015 年 2 月 6 日に発表された安定版) では、 cork()と の 2 つの関数がサポートされるようになり uncork()ました。これらの関数により、最終的に書き込み呼び出しをバッファリング/フラッシュできるようになります。

たとえば、Java には、バッファリングされたストリーム ( BufferedOutputStreamBufferedWriter...) を提供するクラスがいくつかあります。3 バイトを書き込むと、3 バイトだけ I/O 呼び出しを行う代わりに、これらのバイトがバッファ (メモリ) に格納されます。バッファがいっぱいになると、コンテンツがフラッシュされてディスクに保存されます。これにより、パフォーマンスが向上します。

ディスクアクセスの方法を覚えているだけで、何も発見していません。

于 2012-04-28T22:52:15.683 に答える
289

もちろん、もう少し高度にすることもできます。ノンブロッキング、ビットとピースの書き込み、ファイル全体の書き込みではない:

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();
});
于 2011-08-05T15:28:35.490 に答える
35

./articles/file-system の Index が気に入りました。

それは私のために働いた。

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 node write in current directory のように、他のいくつかのノードではそうでないように思われるので、念のためこのコメントを追加します:
Using this ROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH);to get where the file is written.

于 2014-11-07T20:54:32.630 に答える
15

OK、ノードにはこのための機能が組み込まれているため、非常に簡単です。ファイルシステムと基本的にはNodeJSファイルシステムモジュールfsを表すと呼ばれます...

最初に、次のように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!');
});
于 2019-01-28T05:40:50.323 に答える
11
 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");
                            });
                        }
                });
于 2016-10-23T07:54:56.557 に答える
3

ライブラリを使用できます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);
});
于 2016-05-04T05:15:42.143 に答える