如何从文件夹及其子文件夹读取文件并写入JSON文件?

时间:2018-12-20 08:20:41

标签: javascript node.js gulp

我想从文件夹及其子文件夹中读取文件名,并希望创建新文件mainfest.JSON,其中将列出所有文件名。

这是要求

**Input:**

\Temp\file1.txt
\Temp\file2.log
\Temp\subTemp\file3.txt
\Temp\subTemp\file4.txt

**Output**
Mainefest.json
[
“file1.txt” : “\Temp\file1.txt”,
“file2.log” : “\Temp\file2.log”,
“file3.txt” : “\Temp\ subTemp \file1.txt”,
“file4.txt” : “\Temp\ subTemp \file1.txt”
]

下面是我的示例代码

gulp.task('TestApp', function(){
    return gulp.src('./Temp/**/*.*')
        .pipe(
            hash({
                algorithm: 'md5',
                hashLength: 20
            })) // Add hashes to the files' names
            .pipe(gulp.dest('./Output')) // Write the renamed files
            .pipe(hash.manifest('mainfest.json', {
            deleteOld: true,
            sourceDir: __dirname + './output'
        })) // Switch to the manifest file

});

效果很好。但这会添加我不想要的哈希。

我被允许使用javascript,gulp,node js。 有谁可以帮助我实现这一目标。 谢谢。

1 个答案:

答案 0 :(得分:0)

类似的东西应该可以正常工作:

const   path=require('path'),
        fs=require('fs');

class Parser{
    constructor(dir,out){
        this.dir=dir;
        this.out=out;
    }
    parse(){
        const res=[];
        this._parse(this.dir,res);
        fs.writeFileSync(this.out,JSON.stringify(res));
    }
    _parse(dir,result){
        for(const entry of fs.readdirSync(dir)){
            if(fs.lstatSync(path.join(dir,entry)).isDirectory()){
                this._parse(path.join(dir,entry),result);
            }else{
                const e={};
                e[entry]=path.join(dir,entry)
                result.push(e)
            }
        }
    }
}
module.exports=Parser;

您可以像这样使用它:

const parser=require('path/to/file/contains/class'),
      Parser=new parser('dir/to/read','path/to/output/file.json');
Parser.parse();