fs模块的引用
fs模块必须在node.js安装之后才能使用,所以首先必须安装node.js
在js文件中导入文件系统模块
const fs = require('fs');
对文件的操作
1. fs.read()读取文件数据
fs.read(fd, buffer, offset, length, position, callback)
从文件描述符fd
中读取文件数据。
-
buffer
是一个缓冲区,读取的数据将会写入到这里。 -
offset
是开始向缓冲区buffer
写入数据时的偏移量。 -
length
是一个整型值,指定了读取的字节数。 -
position
是一个整型值,指读取的文件起始位置,如果position
为null
,将会从文件当前的位置读取数据。 -
callback
中回调函数,其中包含了三个参数(err, bytesRead, buffer)
,分别表示:错误、读取的字节数、缓冲区。
使用
fs.read()
方法读取文件内容时,首先需要一个文件描述符fd
,创建文件描述符fd
可以使用fs.open()方法。
fs.read()
方法可以实现部分文件内容的读取。通过length
和position
参数可以指定读取文件内容的长度和读取内容的起始位置。
2.1 fs.readFile()读取文件内容
fs.readFile(filename[, options], callback)
读取文件的全部内容
- filename表示要读取的文件
-
callback回调函数有2个参数 (err, data),参数 data 是文件的内容。如果没有指定参数encoding, 则返回值为Buffer。
fs.readFile()方法能且只能读取文件的全部内容,通过设置编码方式可以以字符串或Buffer的形式返回读结果。
fs.readFile('./txt/1.txt',function(err,data){
if(err){
console.log(err)
}
console.log("读取到的数据:"+data.toString())
})
本质上讲,fs.readFile()方法是对fs.read()方法的进一步封装,fs.readFile()方法可以方便的读取文件的全部内容。
相比fs.readFile()方法,使用fs.read()方法读取文件的全部内容可操作性要强很多。首先要用fs.stat判断文件的大小,然后使用fs.open()创建文件描述符,最后再使用fs.read()方法读取文件内容。
read 方法与 readFile 不同,一般针对于文件太大,无法一次性读取全部内容到缓存中或文件大小未知的情况,都是多次读取到 Buffer 中。
2.2 readFileSync的使用
readFileSync和readFile基本一致,唯一的区别是readFileSync使用同步的方式读取数据,且读取的内容通过返回值获取。
具体语法:fs.readFileSync(path[, options]),参数具体含义同上。在使用过程中,如果指定了 encoding 选项,则此函数返回字符串。 否则,返回 buffer。
let data = fs.readFileSync('input.txt', "utf-8");
console.log("同步读取:" + data);
3.文件写入fs.writeFile
fs.writeFile(filename,data,[options],callback)
文件写入操作
- 第一个必选参数 filename ,表示读取的文件名
- 第二个参数要写的数据
- 第三个参数 option 是一个对象
//创建: writeFile(文件名,写入内容,配置参数,回调函数) 异步
//配置参数:
/*
* a :追加
* w :写入
* r :读取
* */
fs.writeFile("2.txt","我是2.txt",{flag:"a"},function (err) {
if(err){
console.log(err);
}else {
console.log("写入成功");
}
})
// 追加写入
fs.appendFile("2.txt","我是追加的字符",function (err) {
if(err){
return console.log(err);
}else {
console.log("追加成功");
}
})
4.拷贝文件-copyFile
fs.copyFile(filenameA, filenameB,callback)
- 第一个参数原始文件名
- 第二个参数要拷贝到的文件名
// 将filePath文件内容拷贝到filePath1文件内容
fs.copyFileSync(filePath, filePath1);
let data = fs.readFileSync(filePath1, 'utf8');
console.log(data);
5.删除文件-unlink
fs.unlink(filename, callback)
// -- 异步文件删除
fs.unlink(filePath,function(err){
if(err) return;
});
// -- 同步删除文件
fs.unlinkSync(filePath,function(err){
if(err) return;
});
6.文件打开-fs.open
fs.open(path,flags,[mode],callback)
fs.open(filePath,'r','0666',function(err,fd){
console.log('emmm',fd);
//返回的第二个参数为一个整数,表示打开文件返回的文件描述符,window中又称文件句柄
})
7.文件关闭-fs.close
fs.close(fd,callback)
// 注意文件描述符fd
fs.open(filePath, 'r', (err, fd) => {
fs.close(fd, err => {
console.log('关闭成功');// 关闭成功
});
});
要先用fs.open来打开文件,然后才可以用fs.read去读,或者用fs.write去写文件,最后,你需要用fs.close去关掉文件。