本文概述
- 基础
- 非阻塞方式
基础【如何使用Node.js中的文件系统(fs)模块创建文件】要使用Node.js创建文件, 我们将使用内置的FileSystem模块。要使用此模块, 请使用:
var fileSystem = require('fs');
所有方法都有异步和同步形式。
创建文件的方法有3种:异步, 同步和非阻塞:
异步地
要以异步方式创建文件, 请使用以下代码段。它使用writeFile方法, 该方法将数据写入文件, 如果文件已经存在, 则替换该文件。数据可以是字符串或缓冲区。
var fs = require('fs');
// Change the content of the file as you want// or either set fileContent to null to create an empty filevar fileContent = "Hello World!";
// The absolute path of the new file with its namevar filepath = "mynewfile.txt";
fs.writeFile(filepath, fileContent, (err) =>
{if (err) throw err;
console.log("The file was succesfully saved!");
});
或直接写一个缓冲区。在这种情况下, 我们将保存来自base64字符串的文件图像:
var fs = require('fs');
// a base64 string of a gif imagevar fileContent = "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";
// The absolute path of the new file with its namevar filepath = "image.gif";
// Save with a buffer as content from a base64 imagefs.writeFile(filepath, new Buffer(fileContent, "base64"), (err) =>
{if (err) throw err;
console.log("The file was succesfully saved!");
});
如果要更改文件的编码, 请提供它作为第三个参数。
var content = "hello world!";
var encoding = "utf8";
fs.writeFile('myfile.txt', content, encoding, (err) =>
{if (err) throw err;
console.log("The file was succesfully saved!");
});
请注意, 在不等待回调的情况下, 对同一文件多次使用fs.writeFile是不安全的。对于这种情况, 强烈建议使用fs.createWriteStream。
同步地
要同步写入文件, 请使用writeFileSync方法。此方法是fs.writeFile的同步版本。它总是返回未定义的, 因此请使用try and catch块来处理任何错误。
var fs = require('fs');
var content = "hello world!";
try{fs.writeFileSync('myfile.txt', content);
}catch (e){console.log("Cannot write file ", e);
}
所有数据都需要同时存储, 这意味着你无法执行顺序写入。
与fs.writeFile一样, 你可以保存缓冲区而不是字符串, 并通过设置第三个参数来指定编码。
非阻塞方式你可以通过实现可写流来优化性能, 而不必一次写入包含一些数据的大文件。当你使用大型文本文件(如日志文件)时, 此方法非常有用。
var fs = require('fs');
var stream = fs.createWriteStream("myfile.txt");
stream.once('open', (fd) =>
{stream.write("First line\n");
stream.write("Second line\n");
// Important to close the stream when you're readystream.end();
});
将创建一个WriteStream, 这非常方便, 因为你无需等待任何回调。用writeFile和writeFileSync相同的方式, 如果createWriteStream的第二个参数是字符串, 则它指定编码。
推荐阅读
- 如何轻松在Node.js中将事件发射器与ES5和ES6结合使用
- 如何在Node.js中将文本转换(合成)为语音
- CRM如何提高IT公司的利率
- 如何在Node.js中使用nodemailer发送电子邮件(gmail,Outlook和Zoho)
- 最新的Zoom安全漏洞(你需要了解的内容)
- 地理编码将如何塑造未来的技术和服务
- 使你的网站闪电般飞速的10条性能提示
- 详解Apache Dubbo的SPI实现机制
- Kubernetes + Spring Cloud 集成链路追踪 SkyWalking