回答:
ファイルシステム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!');
/home/...
。通常、そのディレクトリは755 root:wheel(またはその他)です。ノードがジェーンとしてファイルを書き込みたい場合は、に書き込むほうが簡単/home/jane/test.txt
です。/home
755よりも寛容なものに変更するのは大きな間違いです。
/home
ディレクトリにファイルを保存したかったので、chmodすることを提案しました。セキュリティ上の問題が発生する可能性があることは知っています。しかし、まあ、ユーザーがそこに保存したいのであれば、それが解決策です。PS:私はあなたの言ったことに同意します(:
現在、ファイルを書き込む方法は3つあります。
fs.write(fd, buffer, offset, length, position, callback
)
バッファがディスクに確実に書き込まれるように、コールバックを待つ必要があります。バッファリングされていません。
fs.writeFile(filename, data, [encoding], callback)
すべてのデータは同時に保存する必要があります。順次書き込みは実行できません。
fs.createWriteStream(path, [options]
)
を作成しますWriteStream
。これは、コールバックを待つ必要がないため便利です。しかし、再び、それはバッファリングされていません。
WriteStream
名前が示すように、A はストリームです。ストリームは、定義上、一方向に移動するデータを含む「バッファ」です(ソース►宛先)。ただし、書き込み可能なストリームは必ずしも「バッファリング」されるわけではありません。ストリームは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層への3つの呼び出しです。「バッファ」を使用していますが、データはバッファされません。バッファリングされたストリームは次のことを実行しますfs.write(new Buffer ("abc"))
。
現在、Node.js v0.12(2015年2月6日発表の安定バージョン)ではcork()
、およびの2つの関数がサポートされ
てい
uncork()
ます。これらの関数により、最終的に書き込み呼び出しをバッファリング/フラッシュできるようになります。
たとえば、Javaには、バッファストリーム(BufferedOutputStream
、BufferedWriter
...)を提供するクラスがいくつかあります。3バイトを書き込むと、これらのバイトは、3バイトだけのI / O呼び出しを行う代わりに、バッファ(メモリ)に格納されます。バッファがいっぱいになると、コンテンツがフラッシュされ、ディスクに保存されます。これにより、パフォーマンスが向上します。
私は何も発見していません。ディスクアクセスの方法を覚えているだけです。
cork()
とuncork()
、リリース前の0.11ノードを試してみたいと思っている人のために、例を挙げてください。
npm
バッファリングされた書き込みの実装に関する本番環境品質のライブラリはありますか?
もちろん、もう少し高度にすることもできます。ノンブロッキングで、ファイル全体を一度に書き込むのではなく、少しずつ書き込みます。
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();
});
同期書き込み
fs.writeFileSync(ファイル、データ[、オプション])
fs = require('fs');
fs.writeFileSync("synchronous.txt", "synchronous write!")
非同期書き込み
fs.writeFile(ファイル、データ[、オプション]、コールバック)
fs = require('fs');
fs.writeFile('asynchronous.txt', 'asynchronous write!', (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
どこ
file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
data <string> | <Buffer> | <Uint8Array>
options <Object> | <string>
callback <Function>
公式ファイルシステム(fs)のドキュメントを読む価値があります。
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');
})
});
});
fs.write()
)に設定されているため、この例は、すべてが1回の書き込み呼び出しで書き込むのに十分短い場合にのみ機能します。
私が好き./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ノードの場合と同様に、現在のディレクトリに書き込みますが、そうでない場合もあるため、念のためこのコメントを追加します。
これROOT_APP_PATH = fs.realpathSync('.'); console.log(ROOT_APP_PATH);
を使用して、ファイルの書き込み場所を取得します。
提供される回答には日付が付けられており、これを行う新しい方法は次のとおりです。
const fsPromises = require('fs').promises
await fsPromises.writeFile('/path/to/file.txt', 'data to write')
(node:23759) ExperimentalWarning: The fs.promises API is experimental
v10.15.0
「書き込み」について尋ねられる質問は知っていますが、より一般的な意味では、ファイルにテキストを追加するループで(ファイルが存在するかどうかにかかわらず)簡単に使用できるため、「追加」が役立つ場合があります。行を追加する場合は、「\ n」を使用します。例:
var fs = require('fs');
for (var i=0; i<10; i++){
fs.appendFileSync("junk.csv", "Line:"+i+"\n");
}
const
にvar
、の代わりにを使用const fs = require('fs');
することをお勧めします。
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!');
});
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");
});
}
});
writeFile
ますか?
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');
}
});
};
またuseingにより、このコールバック・インサイド・コールバックのコード構造を取り除きたいかもしれない約束とasync
/ await
文を。これにより、非同期コードの構造がよりフラットになります。これを行うには、便利なutil.promisify(original)関数を使用できます。コールバックからpromiseに切り替えることができます。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);
}
ここでは、両方のアクションの読み取り/書き込みに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」を意味します。
これは、ローカルからファイル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()
fs.createWriteStream(path[,options])
options
またstart
、ファイルの先頭を過ぎた位置にデータを書き込むことを許可するオプションが含まれる場合もあります。ファイルを置き換えるのではなく変更するには、デフォルトモードflags
でr+
はなくのモードが必要になる場合がありますw
。エンコーディングは、Bufferが受け入れるもののいずれかです。
autoClose
がtrue(デフォルトの動作)に設定されている場合、'error'
または'finish'
ファイル記述子は自動的に閉じられます。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');
ライブラリを使用できます 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);
});
This modules is created to save and remove files.
。答えではありません。
次のコード例を使用して、ファイルに書き込むことができます。
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.');
}
});
}
});
writeFile
何年も前にすでに回答として何度も与えられていました。この答えは何を追加しますか?
{ [Error: EACCES, open '/home/test.txt'] errno: 3, code: 'EACCES', path: '/home/test.txt' }
どのように私はそれが外に動作するように、このスクリプトを変更することができますか/tmp
?