从文件夹中的文件创建数组并随机发送

Posted

技术标签:

【中文标题】从文件夹中的文件创建数组并随机发送【英文标题】:Creating an array from files in a folder and sending them randomly 【发布时间】:2019-02-14 17:19:30 【问题描述】:

我正在尝试为 Discord.js 机器人创建一个命令,该命令在触发时将使用从文件夹创建的数组,选择随机图像,然后发送。

我无法手动设置数组,因为文件夹中的图像数量总是会发生变化。

这就是我所拥有的:

if(command.toLowerCase() == "command")

    const fs = require('fs');
    const imageFolderLocation = "./images/";
    var imageArray = [];

    fs.readdir(imageFolderLocation, (err, files) => 
      imageArray = files;
    );

    let randomImage = Math.floor(Math.random() * imageArray.length) + 1;

      for (var i = 0; i < imageArray.length; i++) 
        message.channel.sendFile(randomImage);
      
    return;
  

我尝试使用--trace-warnings 启动机器人,但无济于事。没有警告打印到控制台。

【问题讨论】:

【参考方案1】:

我看到的一些问题:

fs.readdir 是异步的,不能在回调之外使用 files/imageArray 您发送的是随机整数而不是图像 您发送 randomImage imageArray.length 次 你忽略了错误

更正的代码:

if (command.toLowerCase() == "command") 

    const fs = require('fs');
    const imageFolderLocation = "./images/";

    fs.readdir(imageFolderLocation, (err, imageArray) => 

        // TODO if (err)  /* print to console or something */ 

        let randomIndex = Math.floor(Math.random() * imageArray.length) + 1;
        let randomImage = imageArray[randomIndex];

        message.channel.sendFile(randomImage);
    );

    return;

【讨论】:

以上是关于从文件夹中的文件创建数组并随机发送的主要内容,如果未能解决你的问题,请参考以下文章

IO_RandomAccessFile

创建一个随机磁盘文件输入长度的数组

《七》随机访问文件流

将 plist 文件中的两个数组合并为一个

Java之多线程断点下载的实现

Java I/O---RandomAccessFile类(随机访问文件的读取和写入)