var fs = require('fs');
var txt = "以上程序使用fs.readFileSync从源路径读取文件内容,并使用fs.writeFileSync将文件内容写入目标路径。";
//写入文件
fs.writeFile('message.txt', txt, function (err) {
if (err) throw err;
console.log('It\'s saved!'); //文件被保存
});
//读取文件
fs.readFile('message.txt', 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
});
读取文件编码一定要写,不然会读出原生buffer。
3. 从指定位置开始读取文件
fs.open(path, flags[, mode], callback)
- path 为文件的路径,
- flags 可以是以下值。
r :以读取模式打开文件。
r+ :以读写模式打开文件。
w :以写入模式打开文件,如果文件不存在则创建。
w+ :以读写模式打开文件,如果文件不存在则创建。
a :以追加模式打开文件,如果文件不存在则创建。
a+ :以读取追加模式打开文件,如果文件不存在则创建。 - mode 参数用于创建文件时给文件指定权限,默认是 0666。回调函数将会传递一个文 件描述符 fd。
var fs=require('fs');
fs.open('./message.txt','r',function(err,fd) {
console.log(fd);
})
fs.read(fd, buffer, offset, length, position, callback)
-
fd: open 打开的中回调函数的fd,表示一个文件描述符.
-
buffer:一个Buffer对象,将文件数据读取到那个缓冲区。
-
offset:从缓冲区哪里开始写入.
-
length:从文件中读取的字节数.
-
position:从文件那个位置开始读。
-
callback:function (err, bytesRead, buffer).
- err: 发生错误,byteRead,实际读取的文件字节数,position+length可能大于文件的字节数,buffer 被读取的缓冲对象
var fs=require('fs');//message.txt="我喜爱编程";
fs.open('./message.txt','r',function(err,fd) {
var buf=new Buffer(255);
//一个汉字的utf编码为三个字节数据
fs.read(fd,buf,0,9,3,function(err, bytesRead, buffer){
console.log(buffer.slice(0,bytesRead).toString());
});//喜爱编
})
position如果设置为null,则从上次读的位置接着往下读。
var fs=require('fs');
fs.open('./message.txt','r',function(err,fd) {
var buf=new Buffer(255);
//一个汉字的utf编码为三个字节数据
fs.read(fd,buf,0,9,3,function(err, bytesRead, buffer){
console.log(buffer.slice(0,bytesRead).toString());
//结果:喜爱编。从文件的当前读取位置继续往下读取
fs.read(fd,buf,0,3,null,function(err, bytesRead, buffer){
console.log(buffer.slice(0,bytesRead).toString());
});//程
});
})
- fs.write(fd, buffer, offset, length[, position], callback)
fs.write将buffer缓冲器内容写入fd文件描述符, - offset和length决定了将缓冲器中的哪部分写入文件。
- position指明将数据写入文件从头部算起的偏移位置,若position为null,数据将从当前位置开始写入
- callback 回调函数接受两个参数(err, written),其中written标识有多少字节的数据已经写入
注意:写完后要关闭它
var fs=require('fs');
fs.open('./message.txt','r',function(err,fd) {
var buf=new Buffer(255);
//一个汉字的utf编码为三个字节数据
var bytesRead=fs.readSync(fd,buf,0,9,3);
console.log(bytesRead);
console.log(buf.slice(0,bytesRead).toString());
})
追加写入:
var fs=require('fs');
var buf=new Buffer('我喜爱编程');
fs.open('./message.txt','a',function(err,fd) {
fs.write(fd,buf,3,9,0,function(err,written,buffer) {
fs.write(fd,buf,12,3,null,function(err,written,buffer) {
if(err) console.log("写文件操作失败。");
else console.log("写文件操作成功。");
});
});
})
- fs.close(fd, [callback]):关闭文件,有open,就有关闭
var fs=require('fs');
var buf=new Buffer('我喜爱编程');
fs.open('./anotherMessage.txt','wx',function(err,fd) {
fs.write(fd,buf,0,15,0,function(err,written,buffer) {
if(err) console.log("写文件操作失败。");
else console.log("写文件操作成功。");
fs.close(fd);
});
})
- fs.fsync(fd, [callback]):确保缓冲区的文件全部被写入,close之前。
var fs=require('fs');
var buf=new Buffer('我喜爱编程');
fs.open('./anotherMessage.txt','wx',function(err,fd) {
fs.write(fd,buf,0,15,0,function(err,written,buffer) {
if(err) console.log("写文件操作失败。");
else console.log("写文件操作成功。");
fs.fsync(fd);
fs.close(fd);
});
})
4、创建于读取目录
创建目录
以下为创建目录的语法格式:
fs.mkdir(path[, mode], callback)
参数使用说明如下:
- path - 文件路径。
- mode - 设置目录权限,默认为 0777。
- callback - 回调函数,没有参数。
var fs = require("fs");
console.log("创建目录 /tmp/test/");
fs.mkdir("/tmp/test/",function(err){
if (err) {
return console.error(err);
}
console.log("目录创建成功。");
});
以上代码执行结果如下:
$ node file.js
创建目录 /tmp/test/
目录创建成功。
读取目录
以下为读取目录的语法格式:
fs.readdir(path, callback)
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,- files 为 目录下的文件数组列表。
var fs = require("fs");
console.log("查看 /tmp 目录");
fs.readdir("/tmp/",function(err, files){
if (err) {
return console.error(err);
}
files.forEach( function (file){
console.log( file );
});
});
以上代码执行结果如下:
$ node file.js
查看 /tmp 目录
input.out
output.out
test
test.txt
删除目录
以下为删除目录的语法格式:
fs.rmdir(path, callback)
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,没有参数。
var fs = require("fs");
console.log("准备删除目录 /tmp/test");
fs.rmdir("/tmp/test",function(err){
if (err) {
return console.error(err);
}
console.log("读取 /tmp 目录");
fs.readdir("/tmp/",function(err, files){
if (err) {
return console.error(err);
}
files.forEach( function (file){
console.log( file );
});
});
});
以上代码执行结果如下:
$ node file.js
准备删除目录 /tmp/test
input.out
output.out
test
test.txt
读取 /tmp 目录
……
最后
面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
/tmp/test
input.out
output.out
test
test.txt
读取 /tmp 目录
……
### 最后
面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
[外链图片转存中...(img-2TWOny9J-1719222579233)]
[外链图片转存中...(img-Sp7vjx1L-1719222579236)]
[外链图片转存中...(img-QXPFVX9P-1719222579236)]
[外链图片转存中...(img-bBDCBbkt-1719222579237)]