从Java目录中选择一个随机文件

时间:2016-09-22 03:10:44

标签: java file random

我想从我想要的任何目录中选择一个随机文件。如 C:\用户\乔希\图片\ [randomFile]

我没有代码可以证明我只是想知道如何做到这一点。

我正在做的是使用类来更改桌面的背景,现在我想添加一个随机文件,所以当它刷新时背景会有所不同,我不必停止运行代码手动更改路径中文件的名称。如果你想知道它是什么样的

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class BackgroundTest {

    final static File dir = new File("C:\\Users\\Kevin\\Pictures\\Pyimgur\\");
    static int size = 10;
    static String [] fileArray = new String[size];





public static void main(String[] args) {
    File[] files = dir.listFiles();
    for(int i =0; i<size;i++){
        int idz = (int)(Math.random()*size);
        fileArray[i]=files[idz].getName();

    }

    for(String x: fileArray){
        System.out.print(x);
    }

    String path = "C:\\Users\\Kevin\\Pictures\\Pyimgur\\";
    String picture = "picture.jpg";
    //System.out.print(fileArray[0]);

    SPI.INSTANCE.SystemParametersInfo(
            new UINT_PTR(SPI.SPI_SETDESKWALLPAPER),
            new UINT_PTR(0),
            path + picture,
            new UINT_PTR(SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE));
}

public interface SPI extends StdCallLibrary {

    //from MSDN article
    long SPI_SETDESKWALLPAPER = 20;
    long SPIF_UPDATEINIFILE = 0x01;
    long SPIF_SENDWININICHANGE = 0x02;

    SPI INSTANCE = (SPI) Native.loadLibrary("user32", SPI.class, new HashMap<Object, Object>() {
        {
            put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
            put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
        }
    });

    boolean SystemParametersInfo(
            UINT_PTR uiAction,
            UINT_PTR uiParam,
            String pvParam,
            UINT_PTR fWinIni
    );
    }
}

2 个答案:

答案 0 :(得分:10)

  1. 使用array
  2. 在给定目录中创建File.listFiles()个文件
  3. 根据此数组中的随机索引选择文件 这可以使用Random的{​​{1}}类的实例来完成,其中Random.nextInt(int bound),在这种情况下,是bound中的文件数量,因此是数组的长度。
  4. 示例:

    array

答案 1 :(得分:1)

扫描目录以列出其中的文件,然后从该列表中选择一个随机索引。

然后通过仅过滤有效文件(在这种情况下为图像文件)来构建该原则;避免选择与当前图像相同的图像;和其他这样的改进...