packagespt.csv;importjava.io.File;importjava.io.FileNotFoundException;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importjava.util.Map;importjava.util.Random;importspt.util.PropertyConfig;/*** 从1w多条记录中先选出8k条,然后在8k条记录中选出2k条,最后将2k条记录分成10组.*/
public classReadWriteDemo {/***@paramargs*/
public static voidmain(String[] args) {//if (args.length < 1)//throw new NullPointerException("请指定文件路径");
System.out.println("执行中...执行过程请不要关闭此窗口!");final int first_size =Integer.parseInt(PropertyConfig
.getProperty("first_size")); //初次提取长度(8k).
final int second_size =Integer.parseInt(PropertyConfig
.getProperty("second_size")); //初次提取(2k).
final int groupCount =Integer.parseInt(PropertyConfig
.getProperty("groupCount")); //分组个数(10).
String file = PropertyConfig.getProperty("input_file"); //源文件路径.
List fieldNames = null;try{
fieldNames=initFields();
Reader csv= newReader(file);//总记录.
List> totalList =csv.getResult(fieldNames);//初次提取的值(8k).
List> firstTaken =random(totalList, first_size);//再次提取的值(2k).
List> secondTaken =random(firstTaken,
second_size);//每组记录数(2百).
List> tmpTaken =secondTaken;for (int i = 0; i < groupCount; i++) {
List> AGroupTaken =random(tmpTaken,
second_size/groupCount);//除去上次已经使用的元素.
tmpTaken.removeAll(AGroupTaken);//在当前目录上输出(并验证是否存在).
String outputFile = null;//如果文件已存在,则自动命名.
int fileCount = 0;do{
outputFile= "result" + fileCount++ + ".csv";
}while (newFile(outputFile).exists());
Writer writer= newWriter(outputFile);//(集合)排序.
Collections.sort(AGroupTaken, newRecordDateComparator());
writer.write(fieldNames, AGroupTaken);
}
System.out.println("done!");
}catch(FileNotFoundException e) {
System.out.println("请指定正确的文件路径!");//TODO Auto-generated catch block
e.printStackTrace();
}
}/*** 随机产生新的列表(长度比原来小).
*
*@paramoriginalList
* 输入列表.
*@paramnew_size
* 新列表的长度.*/
public static List>random(
List> originalList, intnew_size) {if (new_size <= 0 || new_size >originalList.size())throw new IndexOutOfBoundsException("新列表的长度错误!");
List> newList = new ArrayList>(
new_size);//标识是否已被提取.
boolean[] taken = new boolean[originalList.size()];
Random r= newRandom();
Map map = null; //即将获取的元素.
int rIdx = 0;for (int i = 0; i < new_size; i++) {do{
rIdx=r.nextInt(new_size);
map=originalList.get(rIdx);
}while (taken[rIdx]); //如果发现已经提取,则重复操作.
taken[rIdx] = true; //标识已被提取.
newList.add(map);
}returnnewList;
}private static ListinitFields() {//所有字段.
List fieldNames = new ArrayList(14);
fieldNames.add("id");
fieldNames.add("AJMC");
fieldNames.add("JYAQ");
fieldNames.add("AJLB");
fieldNames.add("AJFAB");
fieldNames.add("AJZT");
fieldNames.add("BASJ");
fieldNames.add("FXSJ");
fieldNames.add("FASJSX");
fieldNames.add("FASJXX");
fieldNames.add("AJBH");
fieldNames.add("ZBX");
fieldNames.add("ZBY");
fieldNames.add("NYR");returnfieldNames;
}
}