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

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

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

18 回复

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

问题描述

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

解决方案

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

以下是具体的实现步骤:

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

运行

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

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

回到顶部