由于这个文件比较大. 我就不传上了.
大致内容是(txt文件)
923636|13000000000|-cxby1|2008-09-27 10:00:00|B
923636|13000000000|-cxby1|2008-11-05 15:47:37|A
923636|13000000000|-cxby1|2008-11-05 16:46:43|A
923636|13000000000|-cxby1|2008-09-11 11:30:00|C
923636|13000000000|-cxby1|2008-11-05 16:10:34|A
923636|13000000000|-cxby1|2008-11-05 16:31:24|A
923636|13000000000|-cxby1|2008-09-27 10:00:00|B
923636|13000000000|-cxby1|2008-11-05 15:55:56|A
923636|13000000000|-cxby1|2008-11-05 16:18:36|B
923636|13000000000|-cxby1|2008-09-27 10:00:00|A
923636|13000000000|-cxby1|2008-09-27 10:00:00|B
923636|13000000000|-cxby1|2008-09-27 10:00:00|A
923636|13000000000|-cxby1|2008-09-27 10:00:00|AA.数据统计:
1.统计A类型的用户数量,信息
2.统计B类型的用户数量,信息
3.统计C类型的用户数量,信息
B.类型输出到文件
1.输出所有A类型的用户到指定文件,并时间排序
2.输出所有B类型的用户到指定文件,并时间排序
3.输出所有C类型的用户到指定文件,并时间排序

解决方案 »

  1.   

    用bufferedReader逐行读取,然后将读取的字符串使用split("|")得到字符串数组,根据该字符串数组的最后一个元素做判断分类,大体就是这样
      

  2.   

    高人,麻烦留步..你能跟我详细的说下吗. 步骤. 如果你有时间的话.我才学Java3个星期. 迫切的想得到解决啊.   
      

  3.   

    一行一行取,然后把每行包装成对象,在根据类型分别存到不同的List中。根据List读取具体的类型对象,分别存入文件。
      

  4.   

    偶也是菜鸟,不是什么高人,下面这段统计数字的代码是手写的,不知道有没有问题
     BufferedReader br=null;
     int numA=0;
    int numB=0;
    int numC=0;
    File file=new File("c:\\test.txt");
    try {
           br = new BufferedReader(new InputStreamReader(
           new FileInputStream(file)));//获得文件流
            
              String line = null;
                    while ((line = br.readLine()) != null) {//读取一行
                        String[] strArray= line.split("|"));
                    }
                    if(A.equals(strArray[strArray.length-1])){
                         numA++;  
                    }else if(B.equals(strArray[strArray.length-1])){
                         numB++;  
                    }else if(C.equals(strArray[strArray.length-1])){
                         numC++;  
                    }
                }
            } finally {
                if (br != null) {
                    br.close();
                }
            }
        }
      

  5.   


    BufferedReader br=null;
     int numA=0;
    int numB=0;
    int numC=0;
    File file=new File("c:\\test.txt");
    try {
           br = new BufferedReader(new InputStreamReader(
           new FileInputStream(file)));//获得文件流
            
              String line = null;
                    while ((line = br.readLine()) != null) {//读取一行
                        String[] strArray= line.split("|"));
                    }
                    if("A".equals(strArray[strArray.length-1])){
                         numA++;  
                    }else if("B".equals(strArray[strArray.length-1])){
                         numB++;  
                    }else if("C".equals(strArray[strArray.length-1])){
                         numC++;  
                    }
                }
            } finally {
                if (br != null) {
                    br.close();
                }
            }
        }
      

  6.   

       if("A".equals(strArray[strArray.length-1])){
                         numA++;  
                    }else if("B".equals(strArray[strArray.length-1])){
                         numB++;  
                    }else if("C".equals(strArray[strArray.length-1])){
                         numC++; 
    这几个地方好象有问题。  strArray[strArray  ``` 
      

  7.   

    绝大部分东西已经帮你做了,剩下 B.类型输出到文件 很容易,因为我帮你按时间排序了,你自己搞定
    package test;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Map;
    import java.util.TreeMap;public class Test {
    public static void main(String[] args) {

    Map<String, User> map = new TreeMap<String, User>();
    // 读取文件
    BufferedReader br = null;
    try {
    br = new BufferedReader(new FileReader(
    new File("src/test/test.txt")));
    String line = "";
    while ((line = br.readLine()) != null) {
    if (line.trim() != "") {
    String[] strings = line.trim().split("\\|");
    User user = new User();
    user.setField_One(strings[0]);
    user.setField_Two(strings[1]);
    user.setField_Three(strings[2]);
    user.setDate(getDate(strings[3]));
    user.setType(strings[4]);
    mapAddUser(map, user);
    } } } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    for(String type:map.keySet()){
    System.out.println("type:"+type+"  数量:"+map.get(type).getCount()+" -- "+map.get(type).getDate().YEAR+"-"
    +map.get(type).getDate().MONTH+"-"+map.get(type).getDate().DAY_OF_MONTH+" "
    +map.get(type).getDate().HOUR_OF_DAY+":"+map.get(type).getDate().MINUTE+":"+map.get(type).getDate().SECOND);
    System.out.println();
    } } public static Calendar getDate(String datetime) {
    SimpleDateFormat format = new SimpleDateFormat(datetime);
    return format.getCalendar();
    } public static void mapAddUser(Map<String, User> map, User user) { if (map.containsKey(user.getType())) {// 如果map存在该类型的user,那么该user的count+1
    User userTemp = map.get(user.getType());
    userTemp.setCount(userTemp.getCount() + 1);
    map.put(userTemp.getType(), userTemp);
    } else {//map不存在该类型的user,那么就在map中添加该类型的user
    map.put(user.getType(), user);
    }
    }}class User implements Comparable {
    private int count;// 用于统计某种类型用户的数量
    private String field_One;
    private String field_Two;
    private String field_Three;
    private Calendar date;
    private String type; public User() {
    this.setCount(1);
    } public int getCount() {
    return count;
    } public void setCount(int count) {
    this.count = count;
    } public String getField_One() {
    return field_One;
    } public void setField_One(String field_One) {
    this.field_One = field_One;
    } public String getField_Two() {
    return field_Two;
    } public void setField_Two(String field_Two) {
    this.field_Two = field_Two;
    } public String getField_Three() {
    return field_Three;
    } public void setField_Three(String field_Three) {
    this.field_Three = field_Three;
    } public Calendar getDate() {
    return date;
    } public void setDate(Calendar date) {
    this.date = date;
    } public String getType() {
    return type;
    } public void setType(String type) {
    this.type = type;
    } public int compareTo(Object o) {
    return (int) (this.getDate().getTimeInMillis() - ((User) o).getDate()
    .getTimeInMillis());
    }}
      

  8.   

    +" -- "+map.get(type).getDate().YEAR+"-"
                        +map.get(type).getDate().MONTH+"-"+map.get(type).getDate().DAY_OF_MONTH+" "
                        +map.get(type).getDate().HOUR_OF_DAY+":"+map.get(type).getDate().MINUTE+":"+map.get(type).getDate().SECOND这里是多余的!
      

  9.   

    改了一下,发现下面的写法更不错,可以为你第二步做了准备!
    package test;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Collections;
    import java.util.List;
    import java.util.Map;
    import java.util.TreeMap;import org.hsqldb.util.ConnectionSetting;public class Test {
    public static void main(String[] args) {

    Map<String, List<User>> map = new TreeMap<String, List<User>>();
    // 读取文件
    BufferedReader br = null;
    try {
    br = new BufferedReader(new FileReader(
    new File("src/test/test.txt")));
    String line = "";
    while ((line = br.readLine()) != null) {
    if (line.trim() != "") {
    String[] strings = line.trim().split("\\|");
    User user = new User();
    user.setField_One(strings[0]);
    user.setField_Two(strings[1]);
    user.setField_Three(strings[2]);
    user.setDate(getDate(strings[3]));
    user.setType(strings[4]);
    mapAddUser(map, user);
    } } } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    for(String type:map.keySet()){
    System.out.println("type:"+type+"  数量:"+map.get(type).size());
    System.out.println();
    } } public static Calendar getDate(String datetime) {
    SimpleDateFormat format = new SimpleDateFormat(datetime);
    return format.getCalendar();
    } public static void mapAddUser(Map<String, List<User>> map, User user) {

    if (map.containsKey(user.getType())) {// 如果map存在该类型的user
    List<User> list=map.get(user.getType());
    list.add(user);
    Collections.sort(list);
    map.put(user.getType(), list);
    } else {//map不存在该类型的user,那么就在map中添加该类型的user
    List<User> list = new ArrayList<User>();
    list.add(user);
    map.put(user.getType(), list);
    }
    }}class User implements Comparable {
    private String field_One;
    private String field_Two;
    private String field_Three;
    private Calendar date;
    private String type; public String getField_One() {
    return field_One;
    } public void setField_One(String field_One) {
    this.field_One = field_One;
    } public String getField_Two() {
    return field_Two;
    } public void setField_Two(String field_Two) {
    this.field_Two = field_Two;
    } public String getField_Three() {
    return field_Three;
    } public void setField_Three(String field_Three) {
    this.field_Three = field_Three;
    } public Calendar getDate() {
    return date;
    } public void setDate(Calendar date) {
    this.date = date;
    } public String getType() {
    return type;
    } public void setType(String type) {
    this.type = type;
    } public int compareTo(Object o) {
    return (int) (this.getDate().getTimeInMillis() - ((User) o).getDate()
    .getTimeInMillis());
    }}
      

  10.   

    为什么br.readLine().trim()会报错啊?
      

  11.   

    继承Comparable接口就是为了排序比较.为什么br.readLine().trim()会报错啊?是br.readLine()为null的时候报错吧!
      

  12.   

    是啊 说java.lang.NullPointerException  把trim()去掉就没事 为什么啊?  NullPointerException 是指针为空?
      

  13.   

    package test;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Serializable;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Collections;
    import java.util.List;
    import java.util.Map;
    import java.util.TreeMap;public class Test {
    public static void main(String[] args) {

    Map<String, List<User>> map = new TreeMap<String, List<User>>();
    // 读取文件
    BufferedReader br = null;
    try {
    br = new BufferedReader(new FileReader(
    new File("src/test/test.txt")));
    String line = "";
    while ((line = br.readLine()) != null) {
    if (line.trim() != "") {
    String[] strings = line.trim().split("\\|");
    User user = new User();
    user.setField_One(strings[0]);
    user.setField_Two(strings[1]);
    user.setField_Three(strings[2]);
    user.setDate(getDate(strings[3]));
    user.setType(strings[4]);

    //把user添加到map的List中
    mapAddUser(map, user);

    //把匹配指定的日期的信息写到指定的文件中
    matchDateToFile(user,strings[3],"2008-11-05","src/test/test2.txt");
    //matchDateToFile(user,strings[3],"指定日期","指定的文件");可以在这里根据日期多次使用
    }
    } } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    for(String type:map.keySet()){
    System.out.println("type:"+type+"  数量:"+map.get(type).size());//根据List的size就可以获得该类型的总数
    System.out.println();
    }

    }

    /**
     * 把匹配指定的日期的信息写到指定的文件中
     * @param user:对应的信息
     * @param date:对应的信息的日期
     * @param datetime:指定日期
     * @param fileName:指定的文件
     */
    public static void matchDateToFile(User user,String date,String datetime,String fileName){
    if(date.indexOf(datetime)!= -1){//如果date不包含datetime则等于-1
    FileWriter fileWriter = null;
    try {
    fileWriter =new FileWriter(fileName, true);
    fileWriter.write(user.getField_One()+"|"+user.getField_Two()+"|"+user.getField_Three()+"|"+date+"|"+user.getType()+"\r");
    } catch (IOException e) {
    e.printStackTrace();
    }finally{
    try {
    fileWriter.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    } /**
     * 获得日期
     * @param datetime
     * @return
     */
    public static Calendar getDate(String datetime) {
    SimpleDateFormat format = new SimpleDateFormat(datetime);
    return format.getCalendar();
    } /**
     * 把user添加到map的List中
     * @param map
     * @param user
     */
    public static void mapAddUser(Map<String, List<User>> map, User user) {

    if (map.containsKey(user.getType())) {// 如果map存在该类型的user
    List<User> list=map.get(user.getType());
    list.add(user);
    Collections.sort(list);
    map.put(user.getType(), list);
    } else {//map不存在该类型的user,那么就在map中添加该类型的user
    List<User> list = new ArrayList<User>();
    list.add(user);
    map.put(user.getType(), list);
    }
    }}
    /**
     * 继承Comparable接口就是为了排序比较
     * 
     * @author qsrock
     *
     */
    class User implements Comparable,Serializable {
    private String field_One;
    private String field_Two;
    private String field_Three;
    private Calendar date;
    private String type; public String getField_One() {
    return field_One;
    } public void setField_One(String field_One) {
    this.field_One = field_One;
    } public String getField_Two() {
    return field_Two;
    } public void setField_Two(String field_Two) {
    this.field_Two = field_Two;
    } public String getField_Three() {
    return field_Three;
    } public void setField_Three(String field_Three) {
    this.field_Three = field_Three;
    } public Calendar getDate() {
    return date;
    } public void setDate(Calendar date) {
    this.date = date;
    } public String getType() {
    return type;
    } public void setType(String type) {
    this.type = type;
    } public int compareTo(Object o) {
    return (int) (this.getDate().getTimeInMillis() - ((User) o).getDate().getTimeInMillis());
    }}
      

  14.   

    按你的要求,按日期写文件,下面够简单了吧
    package test;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;public class Test2 {
    public static void main(String[] args) { // 读取文件
    BufferedReader br = null;
    try {
    br = new BufferedReader(new FileReader(
    new File("src/test/test.txt")));
    String line = "";
    while ((line = br.readLine()) != null) {
    if (line.trim() != "") {
    String[] strings = line.trim().split("\\|"); // 把匹配指定的日期的信息写到指定的文件中
    matchDateToFile(line, strings[3], "2008-11-05",
    "src/test/test3.txt");
    // matchDateToFile(line,strings[3],"指定日期","指定的文件");可以在这里根据日期多次使用
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    } /**
     * 把匹配指定的日期的信息写到指定的文件中
     * 
     * @param line:对应的信息
     * @param date:对应的信息的日期
     * @param datetime:指定日期
     * @param fileName:指定的文件
     */
    public static void matchDateToFile(String line, String date,
    String datetime, String fileName) {
    if (date.indexOf(datetime) != -1) {// 如果date不包含datetime则等于-1
    FileWriter fileWriter = null;
    try {
    fileWriter = new FileWriter(fileName, true);
    fileWriter.write(line + "\r");
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    fileWriter.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }}
      

  15.   

    解决这类实际问题,推荐你学习一下Perl. 几行代码搞定。
      

  16.   

    package test;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;public class Test2 {
    public static void main(String[] args) { BufferedReader br = null;
    FileWriter fileWriter = null;
    try {
    br = new BufferedReader(new FileReader(
    new File("src/test/test.txt")));
    String line = "";
    StringBuffer sb = new StringBuffer();
    while ((line = br.readLine()) != null) {
    if (line.trim() != "") {
    /*
     * 不好意思反了一个大问题,很多操作不应该在这里做的我之前没看,这样写很影响效率,所以改了
     */
    addDataToStringBuffer(sb,line,"2008-11-05");

    }
    }

    fileWriter = new FileWriter("src/test/test3.txt");
    fileWriter.write(sb.toString());
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    try {
    fileWriter.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    } public static void addDataToStringBuffer(StringBuffer sb,String line,String datetime){
    if (line.indexOf(datetime) != -1) {// 如果date不包含datetime则等于-1
    sb.append(line+ "\r");
    }
    }}
      

  17.   

    完全实现版import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Date;
    import java.util.List;public class Gl1010_Test { /**
     * <p>功能描述:把文件转化成List<Uesr></p>
     * @param file
     * @return
     * @throws Exception
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    private List<User> getUsersFromFile(File file) throws Exception {
    List<User> users = new ArrayList<User>();
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String oneLine = "";//每一行的数据
    while((oneLine=reader.readLine()) != null) {//循环读取每一行
    String[] split = oneLine.split("\\|");//用"|"分割字符串
    User user = new User();//创建一个新的用户
    user.setNumber(split[0].trim().length()==0?0:Integer.parseInt(split[0].trim()));//设置用户的Number值
    user.setPhone(split[1].trim());//设置用户的手机号码
    user.setType(split[2].trim());//设置用户的类型
    String dateStr = split[3].trim();//
    if(dateStr.length()>0) {
    Date createDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr);
    user.setCreateDate(createDate);//设置用户的创建日期
    }
    user.setName(split[4].trim());//设置用户的名称
    users.add(user);//把用户加入到一个List中,返回用

    }
    return users;
    }

    /**
     * <p>功能描述:通过用户名输出文件</p>
     * @param userName
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void outFileByUserName(List<User> users, String userName, String filepath) throws Exception {
    if(users != null) {
    this.orderUsers(users);
    StringBuilder sb = new StringBuilder();
    for(User user : users) {
    if(user.getName().equals(userName))//等于输入的名字的用户
    sb.append(user.getNumber()).append("|")
      .append(user.getPhone()).append("|")
      .append(user.getType()).append("|")
      .append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate())).append("|")
      .append(user.getName()).append("\r\n");
    }
    if(sb.length() > 0) {
        FileWriter writer = new FileWriter(new File(filepath));
        writer.write(sb.toString());
        writer.flush();
    }
    }
    }

    /**
     * <p>功能描述:通过时间进行排序</p>
     * @param users
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    private void orderUsers(List<User> users) {
    if(users != null) {
    Collections.sort(users, new Comparator() {
    public int compare(Object o1, Object o2) {
    User user1 = (User) o1;
    User user2 = (User) o2;
    return user1.getCreateDate().compareTo(user2.getCreateDate());
    }

    });

    }
    }
    /**
     * <p>功能描述:测试主方法</p>
     * @param args
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */ public static void main(String[] args) {
    System.out.println("程序开始--->"+System.currentTimeMillis());
    Gl1010_Test test = new Gl1010_Test();
    try {
    List<User> users = test.getUsersFromFile(new File("d:/users.txt"));
    test.outFileByUserName(users,"A","d:/A.txt");
    test.outFileByUserName(users,"B","d:/B.txt");
    test.outFileByUserName(users,"C","d:/C.txt");
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("程序结束--->"+System.currentTimeMillis());
    }

    class User {
    private String name = "";//保存A,B,C用户名称
    private int number  = 0;//保存923636,不知道干什么的,所以起的名字不好
    private String phone = "";//保存13000000000,用户的手机号码
    private String type  = "";//保存-cxby1,用户类型,这里是程序编译类型
    private Date createDate = null;//保存2008-09-27 10:00:00,用户创建日期

    /*****************************************************************
     * 下面是上面属性的Getter和Setter方法
     ******************************************************************/
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getNumber() {
    return number;
    }
    public void setNumber(int number) {
    this.number = number;
    }
    public String getPhone() {
    return phone;
    }
    public void setPhone(String phone) {
    this.phone = phone;
    }
    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public Date getCreateDate() {
    return createDate;
    }
    public void setCreateDate(Date createDate) {
    this.createDate = createDate;
    }

    }}