如何使用java生成包含随机数据的大型csv

如何使用java生成包含随机数据的大型csv,java,Java,如何使用java和一些独特的数据以csv格式生成百万行记录。这可以让您了解如何构建生成器。 可以使用random类生成随机数据,并使其适应需要生成的数据 public interface ICsvRandomRenerator{ /* Adds the field definition to an array list that describes the csv */ public void addFieldDefinition(FieldDefinition fieldDefinit

如何使用java和一些独特的数据以csv格式生成百万行记录。

这可以让您了解如何构建生成器。 可以使用random类生成随机数据,并使其适应需要生成的数据

public interface ICsvRandomRenerator{
  /* Adds the field definition to an array list that describes the csv */
  public void addFieldDefinition(FieldDefinition fieldDefinition);

  /* Runs a loop for the number of records needed and for each one it
     goes through the FieldDefinition ArrayList, generates the random
     data based on field definition, and adds it to the curret
     record. Last field changes to a new record*/

  public void generateFile(String fileName);
};

public class FieldDefinition(){
    String fieldName;
    String fieldType; //Alphabetic, Number, Date, etc..
    int length;
    <getters and setters>
}

public abstract class CsvRandomGenerator implements ICsvRandomGenerator{
    ArrayList<FieldDefinition> fields = new ArrayList<>();

    <@Override interface classes to implement them >.

    private String generateRandomAlpha();

    private String generateRandomDate();

    private String generateRandomNumber();

    ...
}
公共接口ICsvRandomRenerator{
/*将字段定义添加到描述csv的数组列表中*/
public void addFieldDefinition(字段定义字段定义);
/*运行循环以获取所需的记录数,并对每个记录执行循环
遍历FieldDefinition ArrayList,生成随机
基于字段定义的数据,并将其添加到curret
记录。最后一个字段更改为新记录*/
公共void generateFile(字符串文件名);
};
公共类字段定义(){
字符串字段名;
String fieldType;//字母、数字、日期等。。
整数长度;
}
公共抽象类CsvRandomGenerator实现ICsvRandomGenerator{
ArrayList字段=新的ArrayList();
.
私有字符串生成器域Alpha();
私有字符串生成器DomainDate();
私有字符串生成器域编号();
...
}
退房

代码可以非常简单:

MockNeat m = MockNeat.threadLocal();
final Path path = Paths.get("./test.csv");

m.fmt("#{id},#{first},#{last},#{email},#{salary}")
 .param("id", m.longSeq())
 .param("first", m.names().first())
 .param("last", m.names().last())
 .param("email", m.emails())
 .param("salary", m.money().locale(GERMANY).range(2000, 5000))
 .list(1000)
 .consume(list -> {
            try { Files.write(path, list, CREATE, WRITE); }
            catch (IOException e) { e.printStackTrace(); }
 });
可能的结果是:

0,Ailene,Greener,auldsoutache@gmx.com,4.995,59 €
1,Yung,Skovira,sereglady@mail.com,2.850,23 €
2,Shanelle,Hevia,topslawton@mac.com,2.980,19 €
3,Venice,Lepe,sagelyshroud@mail.com,4.611,83 €
4,Mi,Repko,nonedings@email.com,3.811,38 €
5,Leonie,Slomski,plumpcreola@aol.com,4.584,28 €
6,Elisabeth,Blasl,swartjeni@mail.com,2.839,69 €
7,Ernestine,Syphard,prestoshod@aol.com,3.471,93 €
8,Honey,Winfrey,pseudpatria@email.com,4.276,56 €
9,Dian,Holecek,primbra@att.net,3.643,66 €
10,Mitchell,Lawer,lessjoellen@yahoo.com,3.260,92 €
11,Kayla,Labbee,hobnailmastella@mail.com,2.504,99 €
12,Jann,Grafenstein,douremile@verizon.net,4.535,70 €
13,Shaunna,Uknown,taughtclifton@gmx.com,3.028,81 €
...

使用Java有什么特别的原因吗?你试过什么吗?您可能希望在每一行上循环,然后在每一行中的每一列上循环,并生成data@kali,请提供有关您所面临情景的更多详细信息。技术细节和业务需求细节。您将得到更好的答案。递增
long
变量并将其插入新行。。。如果你想要单一性,这就足够了。如果您想要更多类型,只需使用与该数字相关的默认字符串,如
string\u val\u 1
string\u val\u 2
。。。。