java生成流量日志

需求:

  • 输出如下格式数据
    域名 xxxxx.com
    时间 [09/01/2019 00:01:02 +0800]
    流量 4090 一部分日志是正确(数值类型) 一部分日志是错误的(字符串类型)
    ip x.x.x.x

代码

  • 分析:
    1. 域名生成随机字符串
    2. 时间采用SimpleDateFormat(Date)记录当前时间.生成日志速度较快,因此采用Thread.sleep(10)进行模拟时间延时的问题.
    3. 流量随机用random.nextInt生成,一部分转化为string,一部分为int,
    4. ip 随机生成
package com.ruozedata.bigdata.hadoop.generateData;


import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class GenerateData {

    public static String randomDate() {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss ZZZ");
        return formatter.format(date);

    }


    public static String getRandomIp() {

        // ip范围
        int[][] range = {{607649792, 608174079}, // 36.56.0.0-36.63.255.255
                {1038614528, 1039007743}, // 61.232.0.0-61.237.255.255
                {1783627776, 1784676351}, // 106.80.0.0-106.95.255.255
                {2035023872, 2035154943}, // 121.76.0.0-121.77.255.255
                {2078801920, 2079064063}, // 123.232.0.0-123.235.255.255
                {-1950089216, -1948778497}, // 139.196.0.0-139.215.255.255
                {-1425539072, -1425014785}, // 171.8.0.0-171.15.255.255
                {-1236271104, -1235419137}, // 182.80.0.0-182.92.255.255
                {-770113536, -768606209}, // 210.25.0.0-210.47.255.255
                {-569376768, -564133889}, // 222.16.0.0-222.95.255.255
        };

        Random rdint = new Random();
        int index = rdint.nextInt(10);
        String ip = num2ip(range[index][0] + new Random().nextInt(range[index][1] - range[index][0]));
        return ip;
    }

    /*
     * 将十进制转换成IP地址
     */
    public static String num2ip(int ip) {
        int[] b = new int[4];
        String x = "";
        b[0] = (int) ((ip >> 24) & 0xff);
        b[1] = (int) ((ip >> 16) & 0xff);
        b[2] = (int) ((ip >> 8) & 0xff);
        b[3] = (int) (ip & 0xff);
        x = Integer.toString(b[0]) + "." + Integer.toString(b[1]) + "." + Integer.toString(b[2]) + "." + Integer.toString(b[3]);

        return x;
    }


    public static String generateString(int length) //参数为返回随机数的长度
    {
        String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            sb.append(allChar.charAt(random.nextInt(allChar.length())));
        }
        return sb.toString();
    }

    public static Object flow() {

        //生成一些是字符串,一些事int类型的流量数据
        Random random = new Random();
        int isInt = random.nextInt(4);  //0表示string,其他表示int
        int flowNum = random.nextInt(10000) + 20;
        if (isInt == 0) {
            return Integer.toString(flowNum);
        } else {
            return flowNum;
        }


    }


    public static void main(String[] args) throws IOException, InterruptedException {

        File file = new File("/Users/hyc/gitlab/G7-02/flow.txt");
        FileWriter fileWriter = new FileWriter(file);

        int i = 0;
        Random random = new Random();
        while (i < 10000) {

            fileWriter.write(generateString(random.nextInt(10)) + "data.com" + "    " + randomDate() + "    " + flow() + "    " + getRandomIp()+"\n");

            if(random.nextInt(10000)%10 == 7){
                Thread.sleep(10);
            }


//            System.out.println(generateString(random.nextInt(10)) + "data.com" + "    " + randomDate() + "    " + flow() + "    " + getRandomIp());

            if(i == 9999 ){
                fileWriter.close();
            }
            i++;
        }
    }
}

你可能感兴趣的:(流量日志,java,java,code)