我有一个包含 100000 个文件的文件夹,需要通过随机抽样从这个文件夹中获取 1000 个文件。是否有任何示例函数可用于从文件夹中采样?另外,如何将采样文件复制到另一个文件夹?
问问题
147 次
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 Trail或Apache 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 回答