如何读取目录下含JSON内容的TXT文件并按label字段重命名?
批量读取目录并按JSON字段重命名文件
嘿,这个问题我刚好处理过!首先得区分你是在浏览器环境还是用Node.js脚本,因为两种场景的实现方式差很多——你之前写的XMLHttpRequest是浏览器端的API,但浏览器出于安全考虑,根本没法直接读取本地目录,所以得换思路。下面分两种情况给你详细方案:
情况1:Node.js本地脚本(推荐,适合批量处理本地文件)
这是处理本地目录文件最方便的方式,Node.js可以直接访问文件系统,完全满足批量重命名的需求。
实现步骤:
- 引入Node.js内置的
fs(文件系统)和path(路径处理)模块 - 读取目标目录下的所有文件
- 逐个读取文件内容,解析成JSON对象
- 提取
label字段作为新文件名,执行重命名操作
完整代码示例:
const fs = require('fs').promises; const path = require('path'); // 替换成你的目标目录路径,比如 './txt-files' const targetDir = './your-txt-directory'; async function renameFilesByLabel() { try { // 获取目录下的所有文件列表 const files = await fs.readdir(targetDir); for (const file of files) { // 只处理后缀为.txt的文件 if (path.extname(file).toLowerCase() === '.txt') { const fullFilePath = path.join(targetDir, file); // 读取文件内容(utf-8编码) const fileContent = await fs.readFile(fullFilePath, 'utf8'); try { // 解析JSON内容 const jsonData = JSON.parse(fileContent); if (jsonData.label) { // 构造新文件名,保留txt后缀 const newFileName = `${jsonData.label}.txt`; const newFullPath = path.join(targetDir, newFileName); // 执行重命名(注意:如果已有同名文件会被覆盖,可根据需求加重名判断) await fs.rename(fullFilePath, newFullPath); console.log(`✅ 已重命名:${file} → ${newFileName}`); } else { console.log(`⚠️ 跳过文件${file}:未找到label字段`); } } catch (parseError) { console.log(`❌ 跳过文件${file}:JSON解析失败`, parseError); } } } } catch (error) { console.error('❌ 处理过程出错:', error); } } // 启动处理函数 renameFilesByLabel();
使用提示:
- 把
targetDir替换成你的实际目录路径 - 确保已经安装Node.js,然后在终端运行
node 你的脚本文件名.js - 怕重名覆盖的话,可以加个判断:比如检查新文件名是否已存在,若存在就加序号后缀(如
label_1.txt)
情况2:浏览器端实现(需用户手动选择文件)
浏览器出于安全限制,不能直接读写本地文件目录,所以只能让用户通过文件选择器批量选文件,然后生成重命名后的文件供下载:
代码示例:
<!-- 文件选择器,支持多选txt文件 --> <input type="file" id="txtFileInput" multiple accept=".txt"> <button onclick="startProcessing()">开始处理并下载</button> <script> async function startProcessing() { const fileInput = document.getElementById('txtFileInput'); const selectedFiles = fileInput.files; if (selectedFiles.length === 0) { alert('请先选择至少一个TXT文件哦'); return; } for (const file of selectedFiles) { try { // 读取文件内容 const content = await file.text(); // 解析JSON const jsonData = JSON.parse(content); if (jsonData.label) { // 创建Blob对象用于下载 const blob = new Blob([content], { type: 'text/plain' }); const downloadUrl = URL.createObjectURL(blob); // 创建下载链接并触发点击 const downloadLink = document.createElement('a'); downloadLink.href = downloadUrl; downloadLink.download = `${jsonData.label}.txt`; downloadLink.click(); // 释放URL对象 URL.revokeObjectURL(downloadUrl); console.log(`✅ 已生成下载文件:${jsonData.label}.txt`); } else { console.log(`⚠️ 跳过文件${file.name}:未找到label字段`); } } catch (error) { console.log(`❌ 跳过文件${file.name}:文件内容不是有效JSON`, error); } } } </script>
说明:
- 这个方案没法直接修改本地文件,只能生成新文件让用户下载,适合少量文件处理
- 如果你需要批量处理大量文件,还是优先用Node.js的方案
另外提一句:你之前写的同步XMLHttpRequest代码,现在更推荐用异步的fetch或者FileReader,避免阻塞浏览器页面~
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

