node.js之fs模块
fs模块
fs模块用于对系统文件及目录进行读写操作。
fs中的同步异步
模块中所有方法都有同步和异步两种形式,异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined
fs模块中的方法
- fs.mkdir(路径,回调函数) : 创建文件夹
- fs.readdir(路径,回调函数) : 读取文件目录
- fs.readFile(路径,读取格式,回调函数) : 读取文件
- fs.writeFile(路径,写入的内容,写入的格式,回调函数) : 写入文件【写入文件属于覆盖】
- fs.appendFile(路径,追加的内容,写入的格式,回调函数) : 在当前文件后添加内容
- fs.copyFile(路径1,路径2,回调函数) : 拷贝文件
- fs.unlink(路径,回调函数) : 删除文件
fs.mkdir
异步地创建目录。 除了可能的异常,完成回调没有其他参数
let fs = require('fs')
fs.mkdir('./1.text',(err)=>{
if(err){
throw new Error(err)
}else{
console.log('创建成功')
}
})
执行上面代码,创建文件成功会输出
创建成功
,当前文件夹下会创建一个1.text
文件
同步写法
fs.mkdirSync('./1.text')
fs.readdir
异步的 readdir(3)。 读取目录的内容。 回调有两个参数 (err, files),其中 files 是目录中的文件名的数组(不包括 '.' 和 '..')
let fs = require('fs')
fs.readdir('./',(err, files)=>{
console.log(err,files) // null [ '1.js', 'fs.js' ]
})
执行上面代码前,我在当前文件夹下创建了一个
1.js
文件,调用fs.readdir
,这是回调函数的第二个参数会输出当前文件夹下的所有文件名
fs.readFile
异步地读取文件的全部内容。
有一个文件1.js内容如下
// 今天天气真好
和1.js相同目录中有一个fs.js文件,内容如下
let fs = require('fs')
fs.readFile('./1.js',(err, data)=>{
if(err){
throw err
}else{
console.log(data)
}
})
运行结果
<Buffer 2f 2f 20 e4 bb 8a e5 a4 a9 e5 a4 a9 e6 b0 94 e7 9c 9f e5 a5 bd>
,这是原始二进制数据在缓冲区中的内容。
要显示文件内容可以使用toString()或者设置输出编码。
toString写法
let fs = require('fs')
fs.readFile('./1.js',(err, data)=>{
if(err){
throw err
}else{
console.log(data.toString()) // 今天天气真好
}
})
设置utf-8编码写法:
let fs = require('fs')
fs.readFile('./1.js','utf-8',(err, data)=>{
if(err){
throw err
}else{
console.log(data) // 今天天气真好
}
})
fs.writeFile
异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。 data 可以是字符串或 buffer。
let fs = require('fs')
fs.writeFile('./1.js','今天想去哪玩','utf-8',(err, data)=>{
if(err) {
throw err
}
fs.readFile('./1.js','utf-8',(err,data)=>{
if(!err) console.log(data) // 今天想去哪玩
})
})
执行上面代码,1.js文件夹的内容会被覆盖成
今天想去哪玩
,然后我们在调用fs.readFile
,读取文件夹,可以看到上面输出今天去哪玩
,说明我们写入成功了
fs.appendFile
异步地将数据追加到此文件,如果该文件尚不存在,则创建该文件。数据可以是字符串
我们先创建一个1.js
,文件内容如下
今天天气真好,
然后我们执行下面的代码
let fs = require('fs')
fs.appendFile('./1.js','今天想去哪玩','utf-8',(err)=>{
if(err) {
throw err
}
fs.readFile('./1.js','utf-8',(err,data)=>{
if(!err) console.log(data) // 今天天气真好,今天想去哪玩
})
})
执行上面代码,会在
1.js
文件,后面添加进去内容
fs.copyFile
异步地将 src 拷贝到 dest。 默认情况下,如果 dest 已经存在,则覆盖它。 除了可能的异常,回调函数没有其他参数。 Node.js 不保证拷贝操作的原子性。 如果在打开目标文件用于写入后发生错误,则 Node.js 将尝试删除目标文件。
1.js
,文件内容如下
今天天气真好,今天想去哪玩
执行下面代码
let fs = require('fs')
fs.copyFile('./1.js','./2.js',(err)=>{
if(err) {
throw err
}
fs.readFile('./2.js','utf-8',(err,data)=>{
if(!err) console.log(data) // 今天天气真好,今天想去哪玩
})
})
上面代码执行,如果没有
2.js
文件,会先创建一个2.js
文件,然后将1.js
文件的内容拷贝到2.js
,文件中。我们可以看到读取2.js
文件会输出今天添加真好,今天想去哪玩
fs.unlink
异步地删除文件或符号链接。 除了可能的异常,完成回调没有其他参数。
let fs = require('fs')
fs.unlink('./1.js',(err)=>{
if(err) {
throw err
}
})
执行上面代码,将会把
1.js
文件删除