Node.js 文件读写
<h3 id="1fs模块">1.fs模块</h3><p>在node.js中,所有文件的操作都是通过fs模块来实现的。包括文件目录的创建,删除,查询以及文件的读取,写入。<br>
在fs模块中,所有的方法都分成同步和异步两种实现,具有sync后缀的为同步方法,不具有sync后缀的未异步方法。同步方法使用 = 接收返回的结果和数据,而异步方法多一个参数(回调函数),返回的结果和数据以函数参数的形式返回</p>
<p>操作文件前,先引入fs模块</p>
<pre><code>var fs = require("fs")
</code></pre>
<h3 id="2文件读取">2.文件读取</h3>
<p>fs.readFile() :异步读取<br>
参数一:文件路径,如果这个文件不存在,则会出错。<br>
参数二:可选,编码类型,默认为buffer<br>
参数三:回调函数,它共有两个参数(err,data)如果文件写入成功,则err为null,否则为错误代码,data为读取文件的内容</p>
<p>注意:如果要返回字符串,可以在调用readFile时传入参数utf-8,或者直接用toString()来转化data的数据格式。</p>
<pre><code>let fs = require("fs");
fs.readFile('day.txt',function(err, data) {
console.log(err)
if (err) {
console.log('文件读取失败,错误原因:' + err);
} else {
console.log('文件读取成功');
console.log(data);//字节数组
console.log(data.toString());//今天星期二
}
})
</code></pre>
<p>设置encoding为 'utf-8'</p>
<pre><code>let fs = require("fs");
fs.readFile('day.txt','utf-8',function(err, data) {
if (err) {
//如果去读出错,抛出错误后不会再执行后面的代码
throw err;
}
console.log(data);//今天星期二
})
</code></pre>
<h3 id="3写文件">3.写文件</h3>
<p>fs.writeFile() 异步写文件<br>
参数一:被写入的文件路径,如果这个文件不存在,则会新建一个。<br>
参数二:被写入的内容<br>
参数三:回调函数,里面的有个参数err,如果文件写入成功,则err为null,否则为错误代码</p>
<pre><code>let fs = require("fs");
var str = "今天是星期三";
fs.writeFile('day.txt', str,function(err) {
if (err) {
console.log('文件写入失败,错误原因:' + err);
} else {
console.log('文件写入成功');
}
})
</code></pre>
<p>day.txt的文件内容覆盖成 "今天是星期三"</p>
<h3 id="4获取当前执行文件的路径">4.获取当前执行文件的路径</h3>
<p>__dirname:当前执行的js文件所在的目录<br>
__filename:当前执行的js文件的完整路径</p>
<pre><code>//当前js文件的完整路径为 F:\node\02fs\test.js
let fs = require("fs");
console.log(__dirname);//F:\node\02fs
console.log(__filename);//F:\node\02fs\test.js
</code></pre>
<p>注意:这两个变量虽然看似全局的,但实际上不是。当执行这个js文件时,这个文件中的代码会被放入一个自执行函数中来执行,而__dirname和__filename是这个自执行函数的参数而已,所以能够直接使用,即使它不是全局变量。</p>
<h3 id="5路径拼接">5.路径拼接</h3>
<p>如果要操作的文件与当前文件不再同一目录,则需要用到路径拼接。但是每个操作系统对应的路径格式是有差异的,例如windows的路径:F:\node\02fs\test.js使用"",而Linux和苹果系统使用的是"/",所以手动拼接路径就有可能出现问题,为了解决这个问题,可以使用path模块的join()方法来拼接路径</p>
<p>语法:path.join()<br>
这个方法一般与__dirname配合使用</p>
<pre><code>const fs = require("fs");
const path = require('path');
//获取当前目录下source/02.txt文件的路径
var fileName = path.join(__dirname,"source",'02.txt');
//打印路径
console.log(fileName);//F:\node\02fsAndPath\source\02.txt
//根据这个文件路径读取这个文件
fs.readFile(fileName,function(err,data) {
if (err) {
console.log('文件读取失败,错误原因:' + err);
} else {
console.log('文件读取成功');
console.log(data.toString());//今天到底是星期几?
}
})
</code></pre>
<h3 id="6创建文件夹">6.创建文件夹</h3>
<p>fs.mkdir()<br>
参数一:要创建的文件夹的路径<br>
参数二:回调函数</p>
<p>实例:在当前文件夹下创建3个目录</p>
<pre><code>const fs = require("fs");
const path = require('path');
var nameArr = ["html","css","javascript"]
//遍历数组,依次创建文件夹
for(let i=0;i<nameArr.length;i++){
//拼接要创建的文件夹的路径
var dirPath = path.join(__dirname,nameArr)
//根据路径创建目录
fs.mkdir(dirPath,function(err){
if(err){
console.log(err)
}else{
console.log(nameArr + "文件夹创建成功")
}
})
}
</code></pre>
<p>这个例子见证了什么叫异步操作,后面执行的代码反而先执行完毕<br>
<img src="https://img2018.cnblogs.com/blog/1813302/201910/1813302-20191010222938195-1285647004.png"></p><br><br>
来源:https://www.cnblogs.com/OrochiZ-/p/11651089.html
頁:
[1]