Nodejs 给一个本地路径 怎么读取这个路径下的所有文件 并把这些文件罗列出来

Nodejs 给一个本地路径 怎么读取这个路径下的所有文件 并把这些文件罗列出来

给一个本地路径,nodejs 怎么读取这个路径下的所有文件 ,把这些文件罗列出来. 或者用html5 罗列出来。求指导

18 回复

Node.js 读取指定目录下所有文件并罗列出来

问题描述

如何使用 Node.js 读取一个本地路径下的所有文件,并将这些文件罗列出来?

解决方案

我们可以使用 Node.js 的内置模块 fs 和 path 来实现这个功能。fs 模块提供了文件系统相关的 API,而 path 模块则用于处理和转换文件路径。

以下是具体的实现步骤:

  1. 引入必要的模块:我们需要 fs 和 path 模块。
  2. 定义读取目录的函数:该函数将接收一个目录路径作为参数,并返回该目录下的所有文件名。
  3. 调用函数并打印结果:最后,我们调用这个函数并打印出所有的文件名。

示例代码

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

// 定义一个函数来读取目录中的所有文件
function readFilesInDirectory(directoryPath) {
    // 使用 fs.promises.readdir 方法异步读取目录内容
    fs.promises.readdir(directoryPath)
        .then(files => {
            // 过滤掉不是文件的项(例如子目录)
            const filesOnly = files.filter(file => fs.statSync(path.join(directoryPath, file)).isFile());
            // 打印所有文件名
            filesOnly.forEach(file => console.log(file));
        })
        .catch(error => {
            console.error(`无法读取目录: ${directoryPath},错误信息: ${error}`);
        });
}

// 调用函数,传入你想要读取的目录路径
readFilesInDirectory('/path/to/your/directory');

代码解释

  • fs.promises.readdir:这是一个异步方法,它会返回一个 Promise,该 Promise 在解析时会提供一个包含目录中所有条目的数组。这些条目包括文件和子目录。
  • fs.statSync:同步地获取文件或目录的信息。这里我们用它来检查每个条目是否为文件。
  • filter:从文件列表中过滤出仅是文件的条目。
  • console.log:打印文件名到控制台。

这样,当你运行这段代码并传递一个有效的目录路径时,它会列出该目录下的所有文件名。如果你希望在网页上显示这些文件名,你可以进一步将它们发送到前端页面进行展示。


查 fs 对象下的 API 就好了

诶没办法 ,自己写了一个递归。诶 这 用到了这几个api var fs1 = require(‘fs’); stats = fs1.lstatSync(filePath);//查看文件属性 fs1.readdir();罗列文件夹下面文件, 需要的可以参考下

var fs = require('fs'),
    stdin = process.stdin,
    stdout = process.stdout;
var stats = [];

fs.readdir(process.cwd(), function(err, files) {
    console.log(' ');

    if (!files.length) {
        return console.log(' \033[31m No files to show!\033[39m\n');
    }

    function file(i) {

        var filename = files[i];


        fs.stat(__dirname + '/' + filename, function(err, stat) {
            stats[i] = stat;
            if (stat.isDirectory()) {
                console.log(' ' + i + ' \033[36m' + filename + '/\033[39m');
            } else {
                console.log(' ' + i + ' \033[90m' + filename + '\033[39m');
            }

            i++;

            if (i == files.length) {
                read();
            } else {
                file(i);
            }
        });
    }

    function read() {
        console.log(' ');
        stdout.write(' \033[33mEnter your choice : \033[39m');
        stdin.resume();
        stdin.setEncoding('utf8');
        stdin.on('data', option);
    }

    function option(data) {
        var filename = files[Number(data)];
        if (!files[Number(data)]) {
            stdout.write(' \033[mEnter your choice : \033[39m');
        } else if (stats[Number(data)].isDirectory()) {
            fs.readdir(__dirname + '/' + filename, function(err, files) {
                console.log(' ');
                console.log(' (' + files.length + 'files)');
                files.forEach(function(file) {
                    console.log(' - ' + file);
                });
                console.log(' ');
            });
        } else {
            stdin.pause();
            fs.readFile(__dirname + '/' + filename, 'utf8', function(err, data) {
                console.log(' ');
                console.log('\033[90m' + data.replace(/(.*) /g, ' $1') + '\033[39m');
            });
        }
    }

    file(0);
});

《了不起的node.js》 上的代码

嗯哼 这书还不赖

var fs = require(“fs”);

var path = “d:\WinRAR”;

function explorer(path){ fs.readdir(path, function(err,files){ if(err){ console.log(“error:\n”+err); return; }
files.forEach(function(file){ fs.stat(path+"\"+file+’’,function(err,stat){ if(err){ console.log(err); return; }

                if(stat.isDirectory()){
                    console.log(path+"\\"+file+"\\");
                    explorer(path+"\\"+file);
                }else{
                    console.log(path+"\\"+file);
                }
    });
});

});

}

explorer(path);

我自己写的 贴进来格式有点变化,markdown还不太会用

5楼正解~!

var fs = require(‘fs’), util = require(‘util’), path = ‘D:/mp3’;

function explorer(path){

fs.readdir(path, function(err, files){
	//err 为错误 , files 文件名列表包含文件夹与文件
	if(err){
		console.log('error:\n' + err);
		return;
	}
files.forEach(function(file){

	fs.stat(path + '/' + file, function(err, stat){
		if(err){console.log(err); return;}
		if(stat.isDirectory()){					
			// 如果是文件夹遍历
			explorer(path + '/' + file);
		}else{
			// 读出所有的文件
			console.log('文件名:' + path + '/' + file);
		}				
	});
	
});

});

}

explorer(path);

ndir模块做了这件事

fs.readdir

可以参考npm模块glob的实现,

glob可以使用与shell模式匹配一样的方式遍历文件目录树

var glob = require("glob")
// options is optional
glob("**", options, function (err, files) {
})

或者自己用递归的方式实现

const fs = require('fs')

let files = [] function ScanDir(path) { let that = this if (fs.statSync(path).isFile()) { return files.push(path) } try { fs.readdirSync(path).forEach(function (file) { ScanDir.call(that, path + ‘/’ + file) }) } catch (e) { } }

ScanDir(process.cwd()) console.log(files)

Maybe the follow is what you want :)

/**
 * Read all files from build/ folder recursively
 */
function readDir(path){
    let sub = fs.readdirSync(path)
// ignore hide files
sub = sub.filter((e)=>{
    return e.indexOf('.') !== 0
})

// complete path
sub = sub.map((e)=>{
    return _path.resolve(path, e)
})

if(sub.length === 0){
    console.log('😫  build文件夹下没有文件!'.error)
}else{
    return sub
}

} function readPath(path){ // Determine whether the path is dir or not let stat = fs.statSync(path)

if(stat.isFile()){
    S3_files.push(path)
}else if(stat.isDirectory()){
    let sub_children = readDir(path)

    sub_children.forEach((e)=>{
        readPath(e)
    })
}

} readPath(BUILD_PATH)

要使用 Node.js 读取一个本地路径下的所有文件并把它们罗列出来,你可以使用 fs 模块中的方法来递归地遍历目录。以下是一个简单的示例代码:

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

function listFiles(dirPath) {
    fs.readdir(dirPath, { withFileTypes: true }, (err, files) => {
        if (err) {
            console.error(`无法读取目录 ${dirPath}:`, err);
            return;
        }
        
        files.forEach(file => {
            const filePath = path.join(dirPath, file.name);
            if (file.isDirectory()) {
                // 如果是目录,则递归处理
                listFiles(filePath);
            } else {
                // 文件则直接输出路径
                console.log(filePath);
            }
        });
    });
}

// 使用示例
listFiles('/path/to/your/directory');

解释

  1. 引入模块:首先需要引入 Node.js 的内置模块 fs 和 path。
  2. 定义函数:定义一个名为 listFiles 的函数,该函数接受一个目录路径作为参数。
  3. 读取目录:使用 fs.readdir() 方法读取指定目录的内容,并设置 { withFileTypes: true } 参数以获取每个条目的类型(文件或目录)。
  4. 错误处理:如果发生错误(例如,路径不存在),打印错误信息并退出。
  5. 遍历文件列表:对每个文件或子目录进行处理:
    • 对于文件,直接打印其完整路径。
    • 对于子目录,递归调用 listFiles 函数。

运行

将上述代码保存为 .js 文件,然后通过 Node.js 运行它,记得将 /path/to/your/directory 替换为你实际想要遍历的目录路径。

此代码仅适用于 Node.js 环境,如果你需要在浏览器环境中实现类似功能,则需要使用不同的技术栈,如 HTML5 的 FileReader API 或者利用 Web Workers 来处理大量文件。

回到顶部