0

我有一个包含 100000 个文件的文件夹,需要通过随机抽样从这个文件夹中获取 1000 个文件。是否有任何示例函数可用于从文件夹中采样?另外,如何将采样文件复制到另一个文件夹?

4

3 回答 3

3

随机选择可以遵循以下几行

File files[] = new File("/path/to/files").listFiles();
Map<Integer, File> selection = new HashMap<Integer, File>(1000);
while (selection.size() < 1000) {
    int value = (int)Math.round(Math.random() * files.length);
    if (!selection.containsKey(value)) {
        selection.put(value, files[value]);
    }
}
for (File file : selection.values()) {
    System.out.println(file);
}

本质上,您需要获取可用文件的列表并在列表中随机选择,直到您有足够的样本。查看java.io.File

有很多通过网络(和 SO)复制文件的示例。如果你真的被卡住了,你可以看看IO TrailApache Commons IO,我相信它有一个能够处理文件的实用程序类

更新

正如 Andrew 所建议的那样,您可以简单地打乱文件列表并提取前 1000 个元素......

File files[] = new File("/path/to/files").listFiles();
List<File> selection = null;
List<File> fileList = new ArrayList<File>(Arrays.asList(files));
Collections.shuffle(fileList);
selection = fileList.subList(0, Math.min(1000, fileList.size()));

for (File file : selection) {
    System.out.println(file);
}
于 2012-11-06T03:35:34.483 回答
1

请试试这个

public static void main(String args[]) throws Exception
{
File f= new File("E:/Eclipse-Leo/Test/src/test/Desktop1");
List<File> randomFiles = new ArrayList<File>();
List<Integer> randNumber = new ArrayList<Integer>();
if(f != null && f.isDirectory()){
    File[] files = f.listFiles();
    Random randomGenerator = new Random();
    int idx = 1;

    while(idx <101 && idx >= 1)
    {

        int randTemp = randomGenerator.nextInt(1000);
        if(!randNumber.contains(randTemp))
        {
                 randNumber.add(randTemp);
                 randomFiles.add(files[randTemp]);
                 idx++;
        }

    }

}

}
于 2012-11-06T03:45:14.387 回答
0

文件[] 文件 = dir.listFiles();

然后只需使用 files.length 和随机数生成器来索引数组。

于 2012-11-06T03:31:34.907 回答