从文件夹中采样文件

时间:2012-11-06 03:08:34

标签: java

我有一个包含100000个文件的文件夹,需要通过随机抽样从该文件夹中获取1000个文件。我可以使用任何样本函数从文件夹中进行采样吗?另外,如何将采样文件复制到另一个文件夹?

3 个答案:

答案 0 :(得分: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,我认为它有一个能够处理文件的实用程序类

<强>已更新

正如安德鲁所建议的那样,你可以简单地将文件列表随机抽取并拉出前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);
}

答案 1 :(得分: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++;
        }

    }

}

}

答案 2 :(得分:0)

File [] files = dir.listFiles();

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