import java.io.*;
import java.util.*;
class User{
private String username;
private String acctstatustype;
private String acctsessiontime;
void setUname(String s){username=s;}
void setAtype(String s){acctstatustype=s;}
void setAtime(String s){acctsessiontime=s;}
}
public class Assign{
public static void main(String[] args){
int count=0;
String s="D://asc//detail.txt";
String s2="";
String[] s3;
String date,name,value,type,stime,ino,outo; //存储detail.txt中的每条记录
String subname; //subname存储用户列表中的名字,
//int totaltime; //totaltime存储每个用户的总时长
ArrayList list=new ArrayList();
TreeMap map=new TreeMap();
TreeMap map2=new TreeMap();
TreeSet set=new TreeSet(); //存储用户名
File detail=new File(s);
try{
PrintWriter pw=new PrintWriter(new FileWriter("a.txt")); //so here
BufferedReader br=new BufferedReader(new FileReader(detail));
while((s2=br.readLine())!=null)
{
if(s2.equals("")==false) //当没(一整行)遇到""时,即是一个"单元"时
{
StringTokenizer st=new StringTokenizer(s2,"=");
if(st.countTokens()<2) //不是名/值对形式时跳过,忘了第一行日期不是名/值对,同样要加入单元里
map.put("date",s2);//continue;
else
{
name=st.nextToken().trim();
value=st.nextToken().trim();
map.put(name,value); //把每一行添加到其所属的单元内
if(name.equals("User-Name"))
{
set.add(value); //把每个不同用户的名字加入set,为了后面的统计每个用户准备
//int[] totalcount=new int[set.size()];
}
}
//System.out.println("name is "+name+" value is "+value); //Successful
}
else
{ //遇到了(一个整行是)"",说明一个单元结束,把此单元加入list
//if(map.firstKey()!=null) //防止出现连续两个""时,出现NullPointer错误,如果不判断,在detail.txt结尾就有两个"",那么最后的一个元素是空的TreeMap,从Map中get时出现NullPointer错误)
//注意:用map.firstKey()不能判断map里是否有元素(因为如果map里没有元素,直接抛出异常),而是用Map的size()判断
if(map.size()>0)
{
list.add(map); //往list里面添加单元
map=new TreeMap(); //新建map
}
//else
// break;
}
}
}catch(FileNotFoundException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
Iterator it=list.iterator(); while(it.hasNext()) { //***一个单元 map=(TreeMap)it.next(); date=(String)map.get("date"); name=(String)map.get("User-Name"); type=(String)map.get("Acct-Status-Type"); stime=(String)map.get("Acct-Session-Time"); ino=(String)map.get("Acct-Input-Octets"); outo=(String)map.get("Acct-Output-Octets"); //***一个单元 if(type!=null) //上面的判断不好用,所以下面这里还要判断一下,待解决!!!!! { if(type.equals("Stop")) //accttype为Stop的单元 { //防止出现连续两个""时,出现NullPointer错误,如果不判断,在detail.txt结尾就有两个"",那么最后的一个元素是空的TreeMap,从Map中get时出现NullPointer错误),不是这个原因 //System.out.println(type); //问题更新,明明能打印出所有的type值,但是一用type.equals()就出错最后两个值出不来,只能加上面的判断 //System.out.println(" "+value.equals("Stop")); //System.out.println("时间 "+date+"用户 "+name+" 类型 "+type+" 时长 "+stime+" 流入 "+ino+" 流出 "+outo); System.out.println(name+" "+outo); /*Iterator it2=set.iterator(); while(it2.hasNext()) { subname=(String)it2.next(); if(name.equals(subname))//name和其中的一个匹配 //System.out.println((String)it2.next()); }*/ //String[set.size()] s; //=set.toArray(s); /*for(int i=0;i