思路:1.生成活动码 2.随机打乱顺序 3.将生成的活动码对象(list)写入文件 4.每次获取记录并删除
未经同意不得转载
package l_gen_numbers;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.springframework.util.StopWatch;
/**
*
* 创建日期 : 2015-9-10
* 类 描 述 : 生成活动码的类
* 修改历史 :
* 1. [2015-9-10]创建文件 by shisiyuan
*/
public class Generator {
private static char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz").toCharArray();
private static int len = numbersAndLetters.length;
public static String FILE_NAME = "d:\\Generator.txt";
public static void main(String[] args) throws FileNotFoundException, IOException {
StopWatch clock = new StopWatch();// 统计执行时间
// 1.生成号码
clock.start("generator");
List<String> result = gen();
clock.stop();
// 2.随机打乱顺序,i代表次数。现在只设置了一次,可以修改为多次,执行时间比较长,每次在本机差不多5分钟
clock.start("change");
for(int i=0;i<1;i++){
result = change(result);
}
clock.stop();
// // 3.存入文件
clock.start("writeToFile");
writeToFile(result);
clock.stop();
System.out.println(clock.prettyPrint());
long size = len*(len-1)*(len-2)*(len-3)*(len-4)*(len-5)/6/5/4/3/2l;
System.out.println("排列数长度:"+size);
System.out.println("活动码长度:"+result.size());
}
public static void writeToFile(List<String> result) throws FileNotFoundException, IOException{
writeToFile(result, FILE_NAME);
}
// 写入文件
public static void writeToFile(List<String> result, String fileName) throws FileNotFoundException, IOException {
System.out.println("写入文件开始,活动长度"+result.size()+"....");
ObjectOutputStream out = null;
try {
File file = new File(fileName);
if(file.exists()){
file.delete();
}
out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(result);
} finally {
if(out!=null){
out.close();
out = null;
}
System.out.println("写入文件结束....");
}
}
/**
* 随机打乱顺序
*/
public static List<String> change(List<String> list) {
System.out.println("随机打乱顺序执行中,请不要中断....");
List<String> result = new ArrayList<String>();
int size = list.size();
Random random = new Random(size);
List<Integer> indexes = new ArrayList<Integer>();
for (int i = 0; i < size; i++) {
int index = random.nextInt(size-i);
indexes.add(index);
list.get(index)
for(int index : indexes){
result.add(list.get(index));
}
System.out.println("随机打乱顺序完成....");
return result;
}
/**
* 生成活动码
*/
public static List<String> gen(){
System.out.println("生成活动码执行中....");
List<String> result = new ArrayList<String>();
int length = 6;
StringBuilder sb = null;
for(int i1=0;i1<=len-length;i1++){
for(int i2=i1+1;i2<=len-length+1;i2++){
for(int i3=i2+1;i3<=len-length+2;i3++){
for(int i4=i3+1;i4<=len-length+3;i4++){
for(int i5=i4+1;i5<=len-length+4;i5++){
for(int i6=i5+1;i6<=len-length+5;i6++){
sb = new StringBuilder();
sb.append(numbersAndLetters[i1])
.append(numbersAndLetters[i2])
.append(numbersAndLetters[i3])
.append(numbersAndLetters[i4])
.append(numbersAndLetters[i5])
.append(numbersAndLetters[i6]);
result.add(sb.toString());
}
}
}
}
}
}
System.out.println("生成活动码执行完成....");
return result;
}
}
package l_gen_numbers;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
/**
* 创建日期 : 2015-9-10
* 类 描 述 : 获取活动码的类
* 修改历史 :
* 1. [2015-9-10]创建文件 by shisiyuan
*/
public class Fetcher {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
List<String> list = fetchAndDelete(10000);
String filePath = "D:\\fetcher.txt";
writeStringToFile(list, filePath);
System.out.println("获取的活动码长度:"+list.size()+",请查看:"+filePath);
}
private static void writeStringToFile(List<String> list, String filePath) throws IOException {
BufferedWriter writer = null;
try {
File file = new File(filePath);
if(file.exists()){
file.delete();
}
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
for(String code : list){
writer.write(code+"\r\n");
}
} finally {
if(writer!=null){
writer.close();
writer = null;
}
}
}
@SuppressWarnings("unchecked")
public static List<String> fetchAndDelete(int count) throws FileNotFoundException, IOException, ClassNotFoundException{
System.out.println("获取活动码开始,请不要中断...");
List<String> result = new ArrayList<String>();
ObjectInputStream in = null;
try {
// 1.获取数据
in = new ObjectInputStream(new FileInputStream(Generator.FILE_NAME));
List<String> numbers = (List<String>) in.readObject();
for(int i=0;i<count;i++){
result.add(numbers.remove(i));
}
// 2.将删除后的数据重新写到文件中
Generator.writeToFile(numbers);
} finally {
if(in!=null){
in.close();
in = null;
}
}
System.out.println("获取活动码结束,请查看...");
return result;
}
}