主题
fs
介绍
Node.js 的文件系统模块(fs 模块)提供了丰富的 API,用于读取、写入、删除文件以及执行其他文件系统操作。
fs 模块既支持同步方法也支持异步方法,使得开发者可以根据具体需求选择合适的方式来处理文件操作。
导入
js
const fs = require('fs')读取文件
异步读取文件 (fs.readFile)
js
fs.readFile('path/to/file.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err)
return
}
console.log(data)
})path: 文件路径encoding: 文件编码('utf8','base64',等),若不指定,默认返回Buffercallback(err, data): 异常对象和读取的文件内容
同步读取文件 (fs.readFileSync)
js
const data = fs.readFileSync('path/to/file.txt', 'utf8')
console.log(data)写入文件
异步写入文件 (fs.writeFile)
js
fs.writeFile('path/to/file.txt', 'Hello, world!', (err) => {
if (err) {
console.error('Error writing file:', err)
return
}
console.log('File written successfully')
})同步写入文件 (fs.writeFileSync)
js
fs.writeFileSync('path/to/file.txt', 'Hello, world!')
console.log('File written successfully')追加内容到文件 (fs.appendFile)
js
fs.appendFile('path/to/file.txt', 'Appended content', (err) => {
if (err) {
console.error('Error appending to file:', err)
return
}
console.log('Content appended successfully')
})删除文件
异步删除文件 (fs.unlink)
js
fs.unlink('path/to/file.txt', (err) => {
if (err) {
console.error('Error deleting file:', err)
return
}
console.log('File deleted successfully')
})同步删除文件 (fs.unlinkSync)
js
fs.unlinkSync('path/to/file.txt')
console.log('File deleted successfully')检查文件或目录是否存在 (fs.exists)
异步检查文件是否存在 (fs.exists)
js
fs.exists('path/to/file.txt', (exists) => {
console.log(exists ? 'File exists' : 'File does not exist')
})获取文件信息
获取文件信息 (fs.stat)
js
fs.stat('path/to/file.txt', (err, stats) => {
if (err) {
console.error('Error getting file stats:', err)
return
}
console.log(stats)
})stats对象包含文件的详细信息(如大小、创建时间、修改时间等)。
获取文件信息同步 (fs.statSync)
js
const stats = fs.statSync('path/to/file.txt')
console.log(stats)重命名文件或目录
异步重命名 (fs.rename)
js
fs.rename('path/to/oldFile.txt', 'path/to/newFile.txt', (err) => {
if (err) {
console.error('Error renaming file:', err)
return
}
console.log('File renamed successfully')
})同步重命名 (fs.renameSync)
js
fs.renameSync('path/to/oldFile.txt', 'path/to/newFile.txt')
console.log('File renamed successfully')创建目录
异步创建目录 (fs.mkdir)
js
fs.mkdir('path/to/newDir', { recursive: true }, (err) => {
if (err) {
console.error('Error creating directory:', err)
return
}
console.log('Directory created successfully')
})同步创建目录 (fs.mkdirSync)
js
fs.mkdirSync('path/to/newDir', { recursive: true })
console.log('Directory created successfully')读取目录内容
异步读取目录内容 (fs.readdir)
js
fs.readdir('path/to/dir', (err, files) => {
if (err) {
console.error('Error reading directory:', err)
return
}
console.log(files) // 返回文件和子目录名的数组
})同步读取目录内容 (fs.readdirSync)
js
const files = fs.readdirSync('path/to/dir')
console.log(files)删除目录
异步删除目录 (fs.rmdir)
js
fs.rmdir('path/to/dir', (err) => {
if (err) {
console.error('Error removing directory:', err)
return
}
console.log('Directory removed successfully')
})同步删除目录 (fs.rmdirSync)
js
fs.rmdirSync('path/to/dir')
console.log('Directory removed successfully')文件权限
修改文件权限 (fs.chmod)
js
fs.chmod('path/to/file.txt', 0o777, (err) => {
if (err) {
console.error('Error changing file permissions:', err)
return
}
console.log('File permissions changed')
})获取文件权限 (fs.stat)
js
fs.stat('path/to/file.txt', (err, stats) => {
if (err) {
console.error('Error getting file stats:', err)
return
}
console.log('File permissions:', stats.mode)
})流操作
Node.js 还提供了流(Streams)API,用于读取或写入大文件时更高效的处理。
创建文件读取流 (fs.createReadStream)
js
const readStream = fs.createReadStream('path/to/file.txt', 'utf8')
readStream.on('data', (chunk) => {
console.log('Reading chunk:', chunk)
})
readStream.on('end', () => {
console.log('File read complete')
})创建文件写入流 (fs.createWriteStream)
js
const writeStream = fs.createWriteStream('path/to/output.txt')
writeStream.write('Hello, world!')
writeStream.end()
writeStream.on('finish', () => {
console.log('File write complete')
})文件锁定
Node.js 的 fs 模块本身没有内建的文件锁定机制,但可以通过额外的库(如 lockfile)来实现文件锁定。
异常处理
fs 的异步方法通常通过回调来返回错误。错误对象 err 是第一个参数,成功时 err 为 null。对于同步方法,错误会抛出异常,应该使用 try...catch 捕获。
