//HanPengNewAndOldServerGoodsTypeSpendCoin.java
//
import java.util.HashMap;
import java.util.Date;
import java.util.Calendar;
import java.util.ArrayList;
import java.util.Iterator;
import java.text.SimpleDateFormat;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;//使用jason文件
public class HanPengNewAndOldServerGoodsTypeSpendCoin{
private static String createDate(){
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
cal.add(Calendar.DATE,-1);
String date = sdf.format(cal.getTime());
return date;
}
//@SuppressWarnings("unchecked")
private static JSONArray getSerList(File FileSer) throws Exception{
BufferedReader br = new BufferedReader(new FileReader(FileSer));
String temp = null;
JSONArray serlist=null;
while((temp=br.readLine())!=null){
//ArrayList serlist = new ArrayList(JSONArray.fromObject(temp));
serlist = JSONArray.fromObject(temp);
//System.out.println(serlist.toString());
}
System.out.println(serlist.toString());
return serlist;
}
private static void outPutMain(File FileSpend, JSONArray SerList, File FileOut, String Date) throws Exception{
String temp = null;
BufferedReader br = new BufferedReader(new FileReader(FileSpend));
HashMap> serTypeCoin = new HashMap>();
while((temp=br.readLine())!=null){
String [] line = temp.split("\t");
String uid = line[1];
//String str = "123456789";
String ser = uid.substring(0,uid.length()-7);
int coin = Integer.parseInt(line[4]);
String goods = line[7];
//System.out.println(ser);
//if (SerList.contains(ser)){
// System.out.println();
//}
String type = (SerList.contains(ser))?"old":"new";
if (uid.substring(0,1).equals("g")){
//使用嵌套字典
if(serTypeCoin.get(type)==null){
HashMap hm = new HashMap();
hm.put(goods, coin);
//serTypeCoin.put(type,new HashMap(){put(goods, coin);})
serTypeCoin.put(type, hm);
}else{
if(serTypeCoin.get(type).get(goods)==null){
serTypeCoin.get(type).put(goods, coin);
}else{
serTypeCoin.get(type).put(goods, serTypeCoin.get(type).get(goods)+coin);
}
}
}
}
if(!FileOut.exists())
FileOut.createNewFile();
FileOutputStream out = new FileOutputStream(FileOut, true);
Iterator it = serTypeCoin.keySet().iterator();
while(it.hasNext()){
String type = (String) it.next();
HashMap hm = (HashMap) serTypeCoin.get(type);
Iterator hmit = hm.keySet().iterator();
while(hmit.hasNext()){
String goods = hmit.next();
int coin = hm.get(goods);
StringBuffer sb = new StringBuffer();
sb.append(Date+"\t"+type+"\t"+goods+"\t"+coin+"\n");
//System.out.println(Date+"\t"+type+"\t"+goods+"\t"+coin);
out.write(sb.toString().getBytes("utf-8"));
}
System.out.println(type+":"+ serTypeCoin.get(type).size());
}
}
public static void main(String[] args) throws Exception{
String date = (args.length>=1)? args[0]:(createDate());
String superhero = "/home/data/superhero/";
String spendlogpath = superhero+"spendlog/";
String visopath = superhero+"viso_config/";
String outpath = superhero+"wang/result/";
String spendlogname = "spendlog_"+date;
String visoser = "pub_ser_list_"+date;
String outname = "new_and_old_server_goodstype_spend_coin_"+date;
System.out.println(date);
File filespend = new File(spendlogpath+spendlogname);
File fileser = new File(visopath+visoser);
File fileout = new File(outpath+outname);
JSONArray serList = getSerList(fileser);
outPutMain(filespend, serList, fileout, date);
}
}
在linux 环境下且需要引入外部jar包时进行编译代码的命令范例:
javac -classpath /home/data/superhero/wang/myjlib/json-lib-2.4-jdk15.jar \ HanPengNewAndOldServerGoodsTypeSpendCoin.java
编译后运行java的命令范例为:
java -Djava.ext.dirs=/home/data/superhero/wang/myjlib HanPengNewAndOldServerGoodsTypeSpendCoin
注: 参数 -Djava.ext.dirs=/目录 只在 jdk 1.6版本之后的才可用。 其中 目录,如范例中 \ /home/data/superhero/wang/myjlib 为存放外部jar 包的地址。