栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java语言面向对象】(94)消峰

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java语言面向对象】(94)消峰

假设某个目录下有多份话单文件,每个话单文件都比较大,独立处理一个文件耗时比较大。

话单文件,billing1.txt 、billing2.txt、。。。。。billingN.txt

根据指定的主叫号,统计指定的主叫号所有的通话记录,并统一输出到result.txt文件中

话单格式

思路:

使用多线程减压(消峰)

个人案例,代码为主

package com.njwbhz.march.week2.part0310.program;

import java.io.*;
import java.util.Map;
import java.util.TreeMap;

public class CallingTicket {
    public static void PrintCallingTicket () {
        Map map = new TreeMap();
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader("src/com/njwbhz/march/week2/part0310/program/callRecord.txt"));
            String string =null;
            String [] datas = null;
            while ((string = reader.readLine()) != null) {
                datas = string.split(" | ");
                if (!map.containsKey(datas[0])){
                    map.put(datas[0] , datas[4]);
                } else {
                    map.put(datas[0] , String.valueOf(Integer.valueOf(map.get(datas[0])) + Integer.valueOf(datas[4])));
                }
            }
//            map.entrySet().forEach(entry -> System.out.println(entry.getKey() + "t" + entry.getValue() + "秒"));
            map.entrySet().forEach(entry -> {
                try {
                    BufferedWriter writer = new BufferedWriter(new FileWriter("src/com/njwbhz/march/week2/part0310/program/callTicked.txt"));
                    writer.write(entry.getKey() + "t" + entry.getValue() + "秒" + "n");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != reader) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
package com.njwbhz.march.week2.part0310.program;

import java.text.SimpleDateFormat;
import java.util.Date;

public class CallRecord {
    
    private long callingNumber;
    
    private long calledNumber;
    
    private long callDuration;
    
    private Date date;
    private SimpleDateFormat simpleDateFormat;
    private StringBuffer callRecord;

    public CallRecord() {
    }


    public CallRecord(long callingNumber, long calledNumber, long callDuration, Date date) {
        callRecord = new StringBuffer();
        simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        this.callingNumber = callingNumber;
        this.calledNumber = calledNumber;
        this.callDuration = callDuration;
        this.date = date;
        callRecord
                .append(callingNumber)
                .append(" | ")
                .append(calledNumber)
                .append(" | ")
                .append(callDuration)
                .append(" | ")
                .append(simpleDateFormat.format(date))
                .append("n");
    }

    public long getCallingNumber() {
        return callingNumber;
    }

    public void setCallingNumber(long callingNumber) {
        this.callingNumber = callingNumber;
    }

    public long getCalledNumber() {
        return calledNumber;
    }

    public void setCalledNumber(long calledNumber) {
        this.calledNumber = calledNumber;
    }

    public long getCallDuration() {
        return callDuration;
    }

    public void setCallDuration(long callDuration) {
        this.callDuration = callDuration;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public SimpleDateFormat getSimpleDateFormat() {
        return simpleDateFormat;
    }

    public void setSimpleDateFormat(SimpleDateFormat simpleDateFormat) {
        this.simpleDateFormat = simpleDateFormat;
    }

    public StringBuffer getCallRecord() {
        return callRecord;
    }

    public void setCallRecord(StringBuffer callRecord) {
        this.callRecord = callRecord;
    }
}
package com.njwbhz.march.week2.part0310.program;

import java.io.File;
import java.util.Scanner;

public class CallRecordApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String targetNumber;
        //输入查询目标
        System.out.println("请输入查询号码");
        targetNumber = scanner.next();
        File readerFile = new File("src/com/njwbhz/march/week2/part0310/program/callRecord");
        File writerFile = new File("src/com/njwbhz/march/week2/part0310/program/result.txt");
        File [] callRecordFiles = readerFile.listFiles();
        for (File callRecordFile : callRecordFiles) {
            new Thread(new ReadCallRecord(callRecordFile , writerFile , targetNumber)).start();
        }
    }
}
package com.njwbhz.march.week2.part0310.program;

import java.util.Date;
import java.util.Scanner;

public class Phone {
    public void call () {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入主叫号的手机号码:");
        long callingNumber = scanner.nextLong();
        System.out.println("请输入被叫号的手机号码:");
        long calledNumber = scanner.nextLong();
        calling(callingNumber , calledNumber);
    }

    private void calling (long callingNumber , long calledNumber) {
        Date date;
        long startTime;
        long overTime;
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入任意内容开始通话");
        date = new Date();
        startTime = System.currentTimeMillis();
        scanner.next();
        System.out.println("通话中······");
        System.out.println("输入任意内容结束通话");
        scanner.next();
        overTime = System.currentTimeMillis();
        new SaveCallRecordByBufferedOutPutStream(new CallRecord(callingNumber , calledNumber , (overTime - startTime)/1000 , date));
    }
}
package com.njwbhz.march.week2.part0310.program;

import java.io.*;
import java.util.Map;
import java.util.TreeMap;


public class ReadCallRecord implements Runnable {
    private File readerfile;
    private File writerfile;
    private String targetNumber;

    public ReadCallRecord(File readerfile, File writerfile, String targetNumber) {
        this.readerfile = readerfile;
        this.writerfile = writerfile;
        this.targetNumber = targetNumber;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
        readCallRecord(readerfile , writerfile , targetNumber);
    }



    private void readCallRecord (File readerfile , File writerfile , String targetNumber) {
        BufferedReader reader = null;
        BufferedWriter writer = null;
        try {
            reader = new BufferedReader(new FileReader(readerfile));
            String lineData =null;
            String [] datas = null;
            while ((lineData = reader.readLine()) != null) {
                datas = lineData.split(" | ");
                if (datas[0].equalsIgnoreCase(targetNumber)) {
                    //交给线程
                    new Thread(new WriteResult(lineData , new BufferedWriter(new FileWriter(writerfile , true)))).start();
                }
                lineData = reader.readLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != reader) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


}
result.txt

121 | 1212314312412341234 | 5 | 2022-03-10 14:53:35
121 | 1213 | 2 | 2022-03-10 14:52:52
121 | 123423 | 1 | 2022-03-10 14:54:08
121 | 1212 | 11 | 2022-03-10 14:58:09
121 | 213321 | 6 | 2022-03-10 14:55:07
121 | 12 | 1 | 2022-03-10 14:53:11
121 | 1212314312412341234 | 5 | 2022-03-10 14:53:35
121 | 3415265767 | 1 | 2022-03-10 14:58:42
121 | 122 | 1 | 2022-03-10 14:50:42
121 | 2132145 | 16 | 2022-03-10 14:57:22
121 | 124 | 3 | 2022-03-10 14:51:10
121 | 123456 | 4 | 2022-03-10 14:59:00
121 | 23241341 | 3 | 2022-03-10 14:56:53
121 | 126 | 3 | 2022-03-10 14:51:47
package com.njwbhz.march.week2.part0310.program;

import java.io.*;

public class SaveCallRecordByBufferedOutPutStream {
    public SaveCallRecordByBufferedOutPutStream(CallRecord callRecord) {
        try {
//            BufferedWriter writer = new BufferedWriter(new FileWriter("src/com/njwbhz/march/week2/part0310/program/callRecord/callRecord1.txt" , true));
//            BufferedWriter writer = new BufferedWriter(new FileWriter("src/com/njwbhz/march/week2/part0310/program/callRecord/callRecord2.txt" , true));
//            BufferedWriter writer = new BufferedWriter(new FileWriter("src/com/njwbhz/march/week2/part0310/program/callRecord/callRecord3.txt" , true));
//            BufferedWriter writer = new BufferedWriter(new FileWriter("src/com/njwbhz/march/week2/part0310/program/callRecord/callRecord4.txt" , true));
            BufferedWriter writer = new BufferedWriter(new FileWriter("src/com/njwbhz/march/week2/part0310/program/callRecord/callRecord5.txt" , true));
            String string = String.valueOf(callRecord.getCallRecord());
            char [] datas = string.toCharArray();
            writer.write(datas , 0 , datas.length);
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package com.njwbhz.march.week2.part0310.program;

import java.io.*;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class WriteResult implements Runnable {
    private String message;
    private BufferedWriter writer;

    public static synchronized void write (String message , BufferedWriter writer) {
        try {
            writer.write(message);
            writer.newline();
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
        write(message , writer);
    }

    public WriteResult(String message, BufferedWriter writer) {
        this.message = message;
        this.writer = writer;
    }
}
package com.njwbhz.march.week2.part0310.program;

import com.njwbhz.march.week2.part0308.program.CallingTicket;

public class TestCallingTicket {
    public static void main(String[] args) {
        CallingTicket.PrintCallingTicket();
    }
}
package com.njwbhz.march.week2.part0310.program;

public class TestPhone {
    public static void main(String[] args) {
        Phone xiaoMi = new Phone();
        xiaoMi.call();
     
    }
}

话单文件自己制作即可

121 | 122 | 1 | 2022-03-10 14:50:42
121 | 123 | 1 | 2022-03-10 14:50:53
121 | 124 | 3 | 2022-03-10 14:51:10
121 | 125 | 7 | 2022-03-10 14:51:27
121 | 126 | 3 | 2022-03-10 14:51:47
这是样式案例
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号