主题
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'
,等),若不指定,默认返回Buffer
callback(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
捕获。