js实现操作文件夹
在浏览器环境中操作文件夹
浏览器中的JavaScript无法直接访问本地文件系统,但可以通过File System Access API实现有限的文件和文件夹操作:
// 请求文件夹访问权限
const dirHandle = await window.showDirectoryPicker();
// 获取文件夹内文件列表
for await (const entry of dirHandle.values()) {
console.log(entry.name, entry.kind);
}
// 创建新文件
const fileHandle = await dirHandle.getFileHandle('new.txt', { create: true });
const writable = await fileHandle.createWritable();
await writable.write('Hello World');
await writable.close();
在Node.js环境中操作文件夹
Node.js提供了完整的文件系统操作API:
const fs = require('fs');
const fsPromises = require('fs').promises;
const path = require('path');
// 创建文件夹
fs.mkdirSync('./new-folder');
// 读取文件夹内容
const files = fs.readdirSync('./folder');
console.log(files);
// 递归创建目录
fs.mkdirSync('./path/to/folder', { recursive: true });
// 使用Promise API
async function processFolder() {
const files = await fsPromises.readdir('./folder');
for (const file of files) {
const stats = await fsPromises.stat(path.join('./folder', file));
console.log(file, stats.isDirectory() ? 'DIR' : 'FILE');
}
}
使用第三方库简化操作
chokidar库可以实现文件监控:

const chokidar = require('chokidar');
chokidar.watch('./folder').on('all', (event, path) => {
console.log(event, path);
});
fs-extra库提供更丰富的API:
const fse = require('fs-extra');
// 复制整个文件夹
fse.copySync('./source', './dest');
// 删除文件夹及其内容
fse.removeSync('./folder-to-delete');
处理文件路径
使用path模块处理跨平台路径问题:

const fullPath = path.join(__dirname, 'folder', 'file.txt');
const ext = path.extname(fullPath);
const dir = path.dirname(fullPath);
注意事项
浏览器环境中的文件系统API需要用户明确授权,且只能在安全上下文(HTTPS或localhost)中使用。
Node.js文件操作有同步和异步两种形式,生产环境推荐使用异步方法避免阻塞事件循环。
处理用户提供的文件路径时应对路径进行规范化,防止目录遍历攻击。






