fs.existsSync 判断路径是否存在
fs.existsSync(path) 用来判断路径是否存在,如果存在则返回 true,否则返回 false
if (fs.existsSync('/etc/passwd')) {console.log('该路径已存在');}
方法存在异步版本 fs.exists(path, callback) 但已经被废弃。
fs.exists() 回调的参数与其他 Node.js 回调不一致, 通常 Node.js 回调的第一个参数是 err 参数,后面可选地跟随其他参数。 fs.exists() 的回调只有一个布尔值参数
fs.exists('/etc/passwd', (isExists) => {console.log(isExists ? '存在' : '不存在');});
不建议在在对文件操作前使用 fs.exists() 检查文件是否存在,这样做会引入竞态条件,因为其他进程可能会在两次调用之间更改文件的状态。相反应该直接对文件进行操作,如果文件不存在则处理引发的错误
不推荐使用方式
fs.exists('myfile', (exists) => {if (exists) {fs.open('myfile', 'r', (err, fd) => {if (err) throw err;readMyData(fd);});} else {console.error('myfile 不存在');}});
推荐适用方式
fs.open('myfile', 'r', (err, fd) => {if (err) {if (err.code === 'ENOENT') {console.error('myfile 不存在');return;}throw err;}readMyData(fd);});
fs.access 测试用户文件(夹)权限
fs.access(path[, mode], callback) 测试用户对 path 指定的文件或目录的权限。mode 可选值在文件可访问性常量中
| mode 常量 | 说明 | 
|---|---|
F_OK | 
方法默认值,表明文件对调用进程可见,可用于判断文件是否存在 | 
R_OK | 
表明调用进程可以读取文件 | 
W_OK | 
表明调用进程可以写入文件 | 
X_OK | 
表明调用进程可以执行文件,在 Windows 上无效(表现等同 fs.constants.F_OK) | 
const file = './package.json';// 检查当前目录中是否存在该文件fs.access(file, fs.constants.F_OK, (err) => {console.log(`${file} ${err ? '不存在' : '存在'}`);});// 检查文件是否可读fs.access(file, fs.constants.R_OK, (err) => {console.log(`${file} ${err ? '不可读' : '可读'}`);});// 检查文件是否可写fs.access(file, fs.constants.W_OK, (err) => {console.log(`${file} ${err ? '不可写' : '可写'}`);});// 检查当前目录中是否存在该文件,以及该文件是否可写fs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {if (err) {console.error(`${file} ${err.code === 'ENOENT' ? '不存在' : '只可读'}`);} else {console.log(`${file} 存在,且它是可写的`);}});
fs.copyFile 复制文件
fs.copyFile(src, dest[, mode], callback)  将 src 拷贝到 dest, 默认情况下,如果 dest 已经存在则会覆盖,可以通过 mode 参数(文件 copy 常量)修改其行为。
Node.js 不保证拷贝操作的原子性, 如果在打开 dest 文件用于写入后发生错误,则 Node.js 将尝试删除 dest 文件。
const { promises, constants } = require('fs');const { copyFile } = promises;// 默认情况下将创建或覆盖目标文件。copyFile('源文件.txt', '目标文件.txt').then(() => console.log('源文件已拷贝到目标文件')).catch(() => console.log('该文件无法拷贝'));// 通过使用 COPYFILE_EXCL,如果目标文件存在,则操作将失败。copyFile('源文件.txt', '目标文件.txt', constants.COPYFILE_EXCL).then(() => console.log('源文件已拷贝到目标文件')).catch(() => console.log('该文件无法拷贝'));
fs.rename 文件重命名
fs.rename(oldPath, newPath, callback) 将 oldPath 上的文件重命名为 newPath 提供的路径名,如果 newPath 已存在,则覆盖它
fs.rename('oldPath.txt', 'newPath.txt', (err) => {if (err) throw err;console.log('重命名完成');});
fs.unlink 删除文件
fs.unlink(path, callback) 删除常规文件或软链接,不能用于目录
fs.unlink('path/file.txt', (err) => {if (err) throw err;console.log('文件已删除');});
fs.chmod 修改文件模式
fs.chmod(path, mode, callback)
mode 使用八进制表示 0o765 (0o 表示数字是八进制),和 linux 文件权限规则一致,后三位数字分别代表
- 文件 owner 权限
 - 所在 group 权限
 - 其它 group 权限
fs.chmod('my_file.txt', 0o775, (err) => {if (err) throw err;console.log('文件 my_file.txt 的权限已被更改');});
 
