使用 fs/node.js 获取文件类型

Get file type using fs/node.js

我有一个包含少量文件的文件夹,我需要获取与我在 num 变量中生成的编号相匹配的文件的 type/extension,那么我有什么办法可以做到吗?

我当前的代码是:

fs.readdir(dir, (err, files) => {
  const num = (Math.floor(Math.random() * files.length) + 1).toString();
  // here I need to get file type/extension
}

files变量return这个:['1.jpg', '2.png', '3.gif']

要在文件列表中查找文件而不考虑扩展名,请对列表中的文件使用 path.basenamepath.extname 以删除扩展名。对于单个搜索,使用 files.find().

const filename = files.find(x => path.basename(x, path.extname(x)) === num.toString())

但是,出于随机选择的目的,最好从 files 中随机抽取一个条目。原因是,如果文件都是按顺序编号的(从 1 开始),那是一回事,但如果它们不是全部按顺序编号(从 1 开始),则上述内容可能会中断。

const filename = files[num] // and take away + 1 from num

您可以在 ArrayList 中生成一个随机数并获取该文件,而不是匹配整个文件名。

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

fs.readdir(__dirname, (err, files) => {
  const randomNum = Math.floor(Math.random() * files.length);
  // get the random file
  let randomFileName = files[randomNum];
  console.log(randomFileName);

  /// Get unique exts
  const exts = [...new Set(files.map((name) => path.extname(name)))];
  console.log(exts);
  const randomExt = Math.floor(Math.random() * exts.length);
  
  // Get file with random ext
  randomFileName = files.find((x) => path.extname(x) === exts[randomExt]);
  console.log(randomFileName);
});