当前位置:首页 > 时尚

js判断文件夹是否存在

JS里压根没有“文件夹”这个概念,判断只有文件系统API。文件但浏览器端和Node.js环境完全是夹否两码事,别混着说。判断

先看Node.js。文件你写服务端脚本,夹否想确认某个目录存不存在,判断最直接的文件办法是用fs.existsSync()。这玩意儿同步阻塞,夹否但胜在简单粗暴。判断代码就一行:

const fs = require('fs'); if (fs.existsSync('./uploads')) {  console.log('目录在'); } else {  console.log('目录没了'); } 

但这里有个坑——existsSync不光能查目录,文件文件、夹否符号链接、判断socket啥的文件都算“存在”。你要是夹否想严格确认“这是个目录”而不是同名文件,还得加个statSync判断。比如这样:

const fs = require('fs'); try {  const stats = fs.statSync('./uploads'); if (stats.isDirectory()) {  console.log('确认是文件夹'); } else {  console.log('存在,但不是文件夹'); } } catch (err) {  if (err.code === 'ENOENT') {  console.log('路径不存在'); } else {  console.log('其他错误,比如权限不足'); } } 

注意那个try/catch。别用existsSync然后直接访问,因为文件系统操作天生带竞态条件——你刚检查完存在,下一秒可能就被删了。真要严谨,直接用access或open操作,让错误处理接管业务逻辑。

再说浏览器端。网页JS出于安全考虑,根本碰不到本地文件系统。以前有ActiveXObject那种老掉牙的东西,现在早废了。现代浏览器只给你FileReader和FileSystem API,而且这些API只能读取用户主动选择的文件或拖拽进来的文件。你想判断“某个固定路径的文件夹是否存在”?没门,浏览器压根不给你路径。

倒是有个showDirectoryPicker(),用户点一下按钮,弹出系统对话框选个文件夹,然后你就能拿到一个FileSystemDirectoryHandle对象。但这跟“判断文件夹是否存在”是两码事——它只处理用户当前选中的目录,不存在“检查系统里C盘有没有某个文件夹”这种操作。

我自己踩过坑。以前做过一个Electron应用,想在渲染进程里判断用户数据目录是否存在,直接写了fs.existsSync,结果报错——因为渲染进程默认没有Node环境。后来才意识到,Electron里得用IPC调主进程的Node API,或者开nodeIntegration: true(但这有安全风险,不推荐)。

所以总结一下实际经验:判断文件夹是否存在,先分清楚你跑在哪个环境。Node.js后端用fs模块,注意区分文件与目录;浏览器前端根本做不到,只能借助用户交互API;Electron这种混合体得走IPC桥接。别信那些“一行代码搞定”的教程,他们只演示了理想情况,没告诉你异常处理和权限边界。

最后补一句,Node.js官方文档其实推荐用fs.promises.access替代existsSync,因为前者更规范,还支持异步非阻塞。写法是这样:

const {  access, constants } = require('fs/promises'); async function checkDir(path) {  try {  await access(path, constants.R_OK | constants.W_OK); return true; } catch {  return false; } } 

但这又牵扯到权限检测——只检查“存在”而不检查“可读写”,有时候会漏掉真实问题。反正记住一条:文件系统操作永远要把错误处理当主线,别把“存在性检查”当终点。

分享到: