Nodejs fs.readdirSync(path) 读取最新的三个文件怎么写。

Nodejs fs.readdirSync(path) 读取最新的三个文件怎么写。

目录下有很多图片,我想只读取出最新的三个文件怎么写,谢谢。

6 回复

当然可以。针对你的问题,我们可以使用Node.js的fs模块来读取指定目录下的所有文件,并通过比较文件的最后修改时间来找到最新的三个文件。以下是一个简单的示例代码:

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

// 指定目录路径
const directoryPath = './your-directory';

// 读取目录中的所有文件
let files = fs.readdirSync(directoryPath);

// 过滤出实际存在的文件(排除目录)
files = files.filter(file => fs.lstatSync(path.join(directoryPath, file)).isFile());

// 获取每个文件的最后修改时间并排序
files.sort((a, b) => {
    const timeA = fs.lstatSync(path.join(directoryPath, a)).mtime.getTime();
    const timeB = fs.lstatSync(path.join(directoryPath, b)).mtime.getTime();
    return timeB - timeA; // 降序排列,最新的文件排在前面
});

// 取前三个最新文件
const latestFiles = files.slice(0, 3);

console.log(latestFiles);

解释:

  1. 引入模块:我们首先引入了Node.js的fspath模块,前者用于文件系统操作,后者用于处理文件路径。

  2. 指定目录:定义一个变量directoryPath来保存你想要读取的目录路径。

  3. 读取文件列表:使用fs.readdirSync()同步读取指定目录下的所有文件和子目录名。这里使用的是同步方法,如果你的应用需要处理大量文件或需要更好的性能,可以考虑使用异步版本fs.readdir()

  4. 过滤文件:由于readdirSync()会返回所有条目(包括子目录),我们需要过滤出实际的文件。这里使用fs.lstatSync()获取每个条目的状态信息,并通过isFile()方法判断是否为文件。

  5. 排序文件:我们根据文件的最后修改时间进行排序。mtime属性表示文件上次修改的时间。我们将时间较新的文件排在前面。

  6. 获取最新文件:最后,我们使用slice()方法从排序后的数组中取出前三个元素,即最新的三个文件。

希望这段代码能帮助到你!如果有任何问题或需要进一步的帮助,请随时告诉我。


先读取所有的文件,然后循环判断文件的修改时间,根据时间获取最新的。下面是部分思路代码。:

var fs = require('fs');

//我的文件夹名称是20,下面有多个文件,先读取所有的文件 fs.readdir(‘20’, function(err, files){ //对文件进行排序 files.sort(function(val1, val2){ //读取文件信息 var stat1 = fs.statSync(‘20/’ + val1); var stat2 = fs.statSync(‘20/’ + val2);

//根据时间从最新到最旧排序 return stat2.mtime - stat1.mtime; });

//这个时候的files就是排序之后的,前三个一定是最新的, for(var i=0;i<3;i++){ console.log(’%s’, files[i]); }

});

这样就可以找到你要的最新的三个文件。

谢谢上面的两位。上面代码没有问题。

和楼主遇到相同的问题,解决办法也如2楼所说,不知道还有其他办法不

你可以使用 fs.readdirSync 方法来读取指定目录下的所有文件,并结合 fs.statSync 来获取每个文件的最后修改时间。然后你可以将这些文件按修改时间排序,最后选择最新的三个文件。

以下是一个示例代码:

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

// 指定目录路径
const dirPath = './your-directory-path';

// 读取目录中的所有文件
let files = fs.readdirSync(dirPath);

// 创建一个数组来存储文件信息
let fileStats = [];

files.forEach(file => {
    let filePath = path.join(dirPath, file);
    let fileStat = fs.statSync(filePath);

    // 只添加文件(不包括目录)
    if (fileStat.isFile()) {
        fileStats.push({
            name: file,
            mtime: fileStat.mtime
        });
    }
});

// 按最后修改时间排序
fileStats.sort((a, b) => b.mtime - a.mtime);

// 获取最新的三个文件
let latestFiles = fileStats.slice(0, 3).map(file => file.name);

console.log(latestFiles);

解释:

  1. 读取目录内容:使用 fs.readdirSync 读取指定目录的所有文件名。
  2. 获取文件状态:对于每个文件,使用 fs.statSync 获取其状态信息,特别是最后修改时间 (mtime)。
  3. 筛选文件:只保留实际的文件(排除目录)。
  4. 排序:根据文件的最后修改时间对文件进行降序排序。
  5. 提取最新文件:从排序后的文件列表中提取前三个文件。

这样,你就可以得到指定目录下最新的三个文件。

回到顶部