Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析csv字符串并映射到java对象_Java_Google App Engine_Csv - Fatal编程技术网

解析csv字符串并映射到java对象

解析csv字符串并映射到java对象,java,google-app-engine,csv,Java,Google App Engine,Csv,我正在尝试解析这样的csv字符串 COL1,COL2,COL3 1,2,3 2,4,5 并将列映射到java对象- Class Person{ COL1, COL2, COL3; } 我在google上找到的大多数库都是用于csv文件的,但我使用的是google app engine,因此无法写入或读取文件。目前我正在使用拆分方法,但这种方法的问题是 我在csv字符串中得到的列可能会随着 COL1,COL3,

我正在尝试解析这样的csv字符串

    COL1,COL2,COL3
    1,2,3
    2,4,5
并将列映射到java对象-

    Class Person{
       COL1,
       COL2,
       COL3;
     }
我在google上找到的大多数库都是用于csv文件的,但我使用的是google app engine,因此无法写入或读取文件。目前我正在使用拆分方法,但这种方法的问题是

  • 我在csv字符串中得到的列可能会随着

    COL1,COL3,COL2
    
  • 我不想使用分割和获取每个列的锅炉板代码。所以我需要的是列标题列表,并使用标题映射器读取集合中的所有列。迭代时,将列值映射到java对象

  • 有几个问题基于类似的需求类型,但没有一个对我有帮助。 如果有人曾经这样做过,你能分享一下这个想法吗?谢谢

    使用将字符串拆分为对象,然后将其设置为对象

     //Split the string into tokens using a comma as the token seperator
     StringTokenizer st = new StringTokenizer(lineFromFile, ",");
    
     while (st.hasMoreTokens()) 
     {
         //Collect each item  
         st.nextElement();
     } 
    
     //Set to object
     Person p = new Person(item1, item2, item3);
    
    如果可以反转列,则解析标题行,保存其值并使用它来确定每个标记属于哪一列,例如使用
    Map

    String columns[] = new String[3]; //Fill these with column names
    
    Map<String,String> map = new HashMap<>();
    int i=0;
    
    while (st.hasMoreTokens()) 
    {
        //Collect each item  
        map.put(columns[i++], st.nextElement());
    }
    

    在搜索和尝试了几个库之后,我能够解决它。如果以后有人需要,我会分享代码-

        public class CSVParsing {
    
          public void parseCSV() throws IOException {
    
          List<Person> list = Lists.newArrayList();
    
          String str = "COL1,COL2,COL3\n" +
                       "A,B,23\n" +
                       "S,H,20\n";
    
          CsvSchema schema = CsvSchema.emptySchema().withHeader();
    
          ObjectReader mapper = new CsvMapper().reader(Person.class).with(schema);
    
          MappingIterator<Person> it = mapper.readValues(str);
          while (it.hasNext()) {
              list.add(it.next());
          }
    
          System.out.println("stored list is:" + (list != null ? list.toString() : null));
      }}
    
    公共类CSVParsing{
    public void parseCSV()引发IOException{
    List=Lists.newArrayList();
    String str=“COL1、COL2、COL3\n”+
    A、B、23\n+
    “S,H,20\n”;
    CsvSchema schema=CsvSchema.emptySchema().withHeader();
    ObjectReader mapper=new CsvMapper().reader(Person.class).with(schema);
    MappingIterator it=mapper.readValues(str);
    while(it.hasNext()){
    list.add(it.next());
    }
    System.out.println(“存储的列表是:”+(list!=null?list.toString():null));
    }}
    
    我在google上找到的大多数库都是用于csv文件的,但我是 使用google应用程序引擎,因此无法写入或读取文件

    您可以读取文件(在项目文件系统中)。
    您可以在blobstore、google云存储

    用户正则表达式中读取和写入文件,以拆分csv字符串。使用regex grouping()操作符。感谢您的回复。但是,正如我在问题中所说的,我不想得到值,而是想使用迭代器。你想要的东西是一个CSV行并将其转换为一个对象,而无需对其进行任何编码?
        public class CSVParsing {
    
          public void parseCSV() throws IOException {
    
          List<Person> list = Lists.newArrayList();
    
          String str = "COL1,COL2,COL3\n" +
                       "A,B,23\n" +
                       "S,H,20\n";
    
          CsvSchema schema = CsvSchema.emptySchema().withHeader();
    
          ObjectReader mapper = new CsvMapper().reader(Person.class).with(schema);
    
          MappingIterator<Person> it = mapper.readValues(str);
          while (it.hasNext()) {
              list.add(it.next());
          }
    
          System.out.println("stored list is:" + (list != null ? list.toString() : null));
      }}