我正在尝试使用node.js 读取目录树并将其保存到 JSON 文件中,逻辑如下:
- 读取指定目录
- 将路径转换(或者如果可能的话首先获取?)路径为
相对
格式。像这样的事情:
目录: C:/test
{
{"C:/test folder 1": [
{"folder 1": ["file1.txt", "file2.txt"]},
"file1.txt",
"file2.txt",
...
]},
{"C:/test folder 2": [
{"folder 1": ["file1.txt", "file2.txt"]},
"file1.txt",
"file2.txt",
...
]},
"file1.txt",
"file2.txt",
"file3.txt",
...
}
- 将该对象流式传输到 JSON 文件中(我需要流式传输它,因为该对象相当大)
我尝试使用不同的 npm 模块,例如:
walkdir
、walker
、node-klaw
+ fs-extra.writeJson
、json-对象流
等
但是我在尝试将其流式传输到 json 时不断收到不同的错误。
最佳答案
以下脚本应该适合您,只需将 __dirname 替换为您要列出的位置的绝对路径即可。并更新文件名写入位置
我不会在这里检查第一次调用是否确实获得有效的文件夹,并且可能存在与操作系统有关的问题
这里的removeNamespace标志只是为了让第一级保留绝对路径,而不是在下面
var fs = require("fs");
function getContentForLocation(location, removeNamespace) {
let result = [];
let content = fs.readdirSync(location);
content.forEach(c => {
if(fs.statSync(`${location}/${c}`).isFile()) result.push(c);
else {
let name = removeNamespace ? c : `${location}/${c}`;
result.push({
[`${name}`]: getContentForLocation(`${location}/${c}`, true)
})
}
});
return result;
}
let tree = JSON.stringify(getContentForLocation(__dirname))
fs.writeFileSync(`${__dirname}/test.json`, tree)
异步版本:
var fs = require("fs");
function getContentForLocation(location, callback, removeNamespace) {
let result = [];
let folderNames = [];
fs.readdir(location, (err, content) => {
content.forEach(c => {
if(fs.statSync(`${location}/${c}`).isFile()) result.push(c);
else folderNames.push(c);
});
if(folderNames.length === 0) callback(result)
else folderNames.forEach(folder => {
let name = removeNamespace ? folder : `${location}/${folder}`;
getContentForLocation(`${location}/${folder}`, resolveCallback.bind(this, name, folder),true)
})
});
function resolveCallback(name, folder, content) {
result.push({ [name]: content });
folderNames = folderNames.filter(f => f !== folder);
if(folderNames.length === 0) callback(result);
}
}
getContentForLocation(__dirname, results => {
console.log("resolved", results)
fs.writeFile(`${__dirname}/test.json`, JSON.stringify(results), (err) => { console.log(err) })
});
关于javascript - 如何使用 node.js 正确地递归地遍历磁盘目录并将所有相对格式的路径流式传输到 json 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54981119/