我有一个包含100000个文件的文件夹,需要通过随机抽样从该文件夹中获取1000个文件。我可以使用任何样本函数从文件夹中进行采样吗?另外,如何将采样文件复制到另一个文件夹?
答案 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 Trail或Apache 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和随机数生成器来索引数组。