使用fs 模块
import fs from 'fs'
fs.writeFile()
fs.appendFile()
fs.readFile()
fs.unlink()
fs.rename()
fs.stat()
fs.readdir()
fs.mkdir()
fs.rmdir()
fs.createReadStream()
fs.createWriteStream()
1. writeFile 方法
参数1: 写入的文件名称,可指定具体路径,若指定具体路径,路径的文件目录必须存在,否则会报错 参数2: 写入文件的内容 参数3: 回调函数 调用该方法后,会在当前目录创建一个index.txt 文件,若文件已存在,则删除该文件并重新创建,文件的内容为:Node.js 从入门到放弃。
fs.writeFile('index.txt', 'Node.js 从入门到放弃', err => {
if (err) {
console.log(err)
return
}
console.log('写入文件成功!')
})
2. appendFile 方法
参数1: 写入的文件名称,可指定具体路径,若指定具体路径,路径的文件目录必须存在,否则会报错 参数2: 写入文件的内容 参数3: 回调函数 调用该方法后,会在当前目录创建一个index.txt 文件,若文件已存在,不会删除文件,而是在原文件的基础上添加内容,文件的内容为:Node.js 从入门到放弃。调用两次则文件的内容为:Node.js 从入门到放弃Node.js 从入门到放弃。
fs.appendFile('index.txt', 'Node.js 从入门到放弃', err => {
if (err) {
console.log(err)
return
}
console.log('追加内容的写入文件成功!')
})
3. readFile方法
参数1: 指定读取的文件,若文件不存在,会报错 参数2: 回调函数 调用该方法后,会读取指定的文件内容,由回调函数第二个参数返回,类型为buffer ,调用toString 方法以便在控制台显示打印的日志内容。
fs.readFile('index.txt', (err, data) => {
if (err) {
console.log(err)
return
}
console.log('读文件成功!', data.toString())
})
4. unlink方法
参数1: 指定删除的文件,若文件不存在,会报错 参数2: 回调函数 调用该方法后,会删除指定的文件。
fs.unlink('index.txt', err => {
if (err) {
console.log(err)
return
}
console.log('删除文件成功!')
})
5. rename方法
参数1: 旧文件名称 参数2: 新文件名称 参数3: 回调函数 调用该方法后,若新旧文件在同一目录,则重命名文件名称,若新旧文件不在同一目录,则剪切文件。若旧文件原本就不存在,会报错;指定具体的目录时,若目录不存在则报错。
fs.rename('index.txt', 'news/css.txt', err => {
if (err) {
console.log(err)
return
}
console.log('重命名文件成功!')
})
6. stat 方法
参数1: 指定的文件或目录 参数3: 回调函数 调用该方法,可判断文件或目录,若指定的文件或目录不存在,则报错。
fs.stat('index.txt', (err, stats) => {
if (err) {
console.log(err)
return
}
console.log('文件:', stats.isFile())
console.log('目录:', stats.isDirectory())
})
7. readdir 方法
参数1: 指定的目录,可指定具体路径,若指定具体路径,路径的文件目录必须存在,否则会报错 参数2: 回调函数 调用该方法,可创建指定的目录。
fs.readdir('news', (err, data) => {
if (err) {
console.log(err)
return
}
console.log('读目录成功!', data)
})
8. mkdir 方法
参数1: 指定的目录名称 参数2: 回调函数 调用该方法,创建指定的目录。
fs.mkdir('news', err => {
if (err) {
console.log(err)
return
}
console.log('创建文件夹成功!')
})
9. rmdir 方法
参数1: 指定的目录 参数2: 回调函数 调用该方法,删除指定的目录,若指定的目录不存在或指定目录存在内容,则会报错。
fs.rmdir('t', err => {
if (err) {
console.log(err)
return
}
console.log('删除文件夹成功!')
})
10. createReadStream 方法
当文件比较大时,readFile 方法读文件会比较慢,因为readFile 一次性读完,性能不佳,建议使用createReadStream 方法通过流的方式读取文件。
const readStream = fs.createReadStream('read.txt')
let str = ''
let count = 0
readStream.on('data', data => {
str+=data
count++
})
readStream.on('end', () => {
console.log('读文件成功!')
console.log(str)
console.log(count)
})
readStream.on('error', () => {
console.log('读文件失败!')
})
11. createWriteStream 方法
当文件比较大时,writeFile 方法写文件会比较慢,因为writeFile 一次性写完,性能不佳,建议使用createWriteStream 方法通过流的方式写入文件。
const writeStream = fs.createWriteStream('write.txt')
for (let i = 0; i < 1000; i++) {
writeStream.write('Node.js 从入门到放弃', 'utf8')
}
writeStream.end()
writeStream.on('finish', () => {
console.log('写入文件成功!')
})
writeStream.on('err', () => {
console.log('写入文件失败!')
})
通过读文件流pipe 方法,可将读取的文件内容复制到指定的文件,如下,将read.txt 文件的内容复制到ok.txt 文件,若ok.txt 文件不存在,则创建ok.txt 文件。
const readStream = fs.createReadStream('read.txt')
const writeStream = fs.createWriteStream('ok.txt')
readStream.pipe(writeStream)
小试牛刀
需求1: 判断当前目录是否有upload 文件夹,若没有则创建upload 文件夹
fs.readdir('./', (err, files) => {
if (err) {
console.log('获取当前目录文件列表失败!')
return
}
const upload = files.find(file => file === 'upload')
if (!upload) {
fs.mkdir('upload', err => {})
} else {
console.log('upload目录已存在')
}
})
需求2: 获取当前目录下的所有文件,但不包含目录
fs.readdir('./', (err, files) => {
if (err) {
console.log('获取当前目录文件列表失败!')
return
}
const result = files.filter(file => fs.statSync(file).isFile())
console.log('当前目录下的所有文件', result)
})
|