【问题标题】:reading a CSV file into different types of arrays and then into an Arraylist将 CSV 文件读入不同类型的数组,然后读入 Arraylist
【发布时间】:2018-12-30 06:07:01
【问题描述】:

我已将 CSV 文件导入 java,然后将 CSV 文件的每一列读入单独的数组。然后我想将所有这些数组放入一个数组列表中。以下是我的代码。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.sql.*;
import oracle.jdbc.driver.*;


 public class verbindung { 

     public static void main(String[] args) {
        String filename = "betreuen_4.csv";
        File file = new File(filename);

        ArrayList<caring> betreuen = new ArrayList<caring>();

        try {
            Scanner inputStream = new Scanner(file);
            while(inputStream.hasNext()) {
                String data = inputStream.next();
                String[] values = data.split(",");
                int PInummer = Integer.parseInt(values[1]);
                String MNummer = values[0];
                String KundenID = values[2];
                System.out.println(MNummer);
            }
            inputStream.close();
        }catch(FileNotFoundException e) {
            e.printStackTrace();
        }
        betreuen[0] = MNummer;


    }


}  

我在显示的最后一行代码中遇到错误

betreuen[0] = MNummer;

错误状态:

线程“main”java.lang.Error 中的异常:未解决的编译问题: 表达式的类型必须是数组类型,但它解析为 ArrayList MNummer 无法解析为变量

caring是由以下代码创建的类

public class caring {
String MNr;  
int PINr;
String KID;

public caring(String MNummer,int PInummer, String KundenID ) {
    this.MNr = MNummer;
    this.PINr = PInummer;
    this.KID = KundenID;
}
}

我已经在谷歌中输入了这个错误,我相信我可能明白我为什么会收到这个错误。问题是虽然我在网上查了很多资料,但我不知道如何得到我想要的结果。

简而言之,我希望我的 Arraylist 包含数组(MNummer、PInummer、KundenID)。我需要它是我要编写的代码的数组列表,用于通过 Java 将批处理插入数据库。

【问题讨论】:

    标签: java csv arraylist


    【解决方案1】:

    您正试图以标准数组的形式访问ArrayList&lt;caring&gt; betreuen

    ArrayList&lt;Type&gt; 是一个类的单个实例(对象),然而,这个类存储了一个数据数组。

    要存储和检索数据,您必须使用 add、remove、set 等类的适当方法。

    要添加到ArrayList&lt;caring&gt;,您需要使用要添加的参数调用方法add(),在本例中为betruen.add(MNummer);

    然而这不起作用,因为 MNummer 是一个字符串对象而不是 caring 对象,因此您必须首先创建一个 caring 类型的对象才能添加到 betruen。

    我们可以通过调用caring _caring = new caring(MNummer, PInummer, KundenID);来创建它

    请注意,对象类通常应以大写字母开头,而变量通常应以小写字母开头,这样您就可以编写这样的代码@ 987654328@ 而不是 caring _caring = new caring()caring caring = new caring(),后者不会运行,因为 JVM 会混淆变量名与类名相同。

    现在我们有了caring 对象,我们现在可以通过将betreuen[0] = MNummer; 替换为betreuen.add(caring); 将其添加到ArrayList 如果你尝试运行它,它很可能会给你另一个编译错误,因为你试图访问它范围之外的变量。

    以下面的代码为例,我们在if语句的大括号“{”之前定义了obj1,这样if语句中的任何东西都可以访问obj1。

    public void test()
    {
        String obj1 = "hello";
        if(obj1.equals("hello"))
        {
            obj1 = "bye";
        }
    }
    

    但是下面的代码将不起作用,我们在 if 语句的左大括号“{”内定义了 obj2,因此 if 语句之外的任何内容都无法访问 obj1。

    public void test()
    {
        String obj1 = "hello";
        if(obj1.equals("hello"))
        {
            String obj2 = "bye";
        }
        obj2 = "hello";
    }
    

    要将以上内容组合在一起,您的代码应如下所示: 顺便说一句:如果任何 CSV 字段中有逗号,您的代码可能无法正确运行,建议使用预先存在的 CSV 库,但是,如果您仍希望自己解析 CSV,您可能希望阅读RFC 4178 Common Format and MIME Type for Comma-Separated Values (CSV) Files 获取有关 CSV 文件格式的指导

     public class verbindung { 
    
         public static void main(String[] args) {
            String filename = "betreuen_4.csv";
            File file = new File(filename);
    
            ArrayList<caring> betreuen = new ArrayList<caring>();
    
            try {
                Scanner inputStream = new Scanner(file);
                while(inputStream.hasNext()) {
                    String data = inputStream.next();
                    String[] values = data.split(",");
                    int PInummer = Integer.parseInt(values[1]);
                    String MNummer = values[0];
                    String KundenID = values[2];
                    System.out.println(MNummer);
                    //create the caring object with the required paramaters
                    caring _caring = new caring(MNummer, PInummer, KundenID);
                    //add _caring object to the betreuen array here as it is within the same scope.
                    betreuen.add(_caring);
                }
                inputStream.close();
            }catch(FileNotFoundException e) {
                e.printStackTrace();
            }
            //this will cause a compilation error
            //betreuen[0] = MNummer;
    
            //this will also cause a compilation error because it is out of the scope of _caring
            //betreuen.add(_caring);
        }
    } 
    

    【讨论】:

    • 这对那些自学Java的人很有帮助,谢谢
    【解决方案2】:

    您读取 csv 行并将值分配给变量,但您既没有创建 caring 实例也没有将它们添加到数组列表 betreuen

    int PInummer = Integer.parseInt(values[1]);
    String MNummer = values[0];
    String KundenID = values[2];
    System.out.println(MNummer);
    caring aCaring = new caring(MNummer, PInummer, KundenID); /// create an instance of caring from line values
    betreuen.add(aCaring); /// add instance to the arraylist
    

    【讨论】:

      【解决方案3】:

      简而言之,我希望我的 Arraylist 包含数组 (MNummer、PInummer、KundenID)。我需要它成为代码的数组列表 我要写的是通过 Java。

      据我了解,您需要一个包含所有列的 ArrayList/Bean,其中每列都是一个数组。

      // List of all elements in a column
      List<Integer> PInummer = new ArrayList<Integer>();
      List<String> MNummer = new ArrayList<String>();
      List<String> KundenID = new ArrayList<String>();
      
      while(inputStream.hasNext()) 
      {
          String[] values = inputStream.next().split(",");
          PInummer.add(Integer.parseInt(values[1]));
          MNummer.add(values[0]);
          KundenID.add(values[2])
      }
      
      Integer[] PInummerArray = PInummer.toArray(new Integer[PInummer.size()]);
      String[] MNummerArray = MNummer.toArray(new String[MNummer.size()]);
      String[] KundenIDArray = KundenID.toArray(new String[KundenID.size()]);
      
      // List of all columns (the complete cSV)
      List<Object> caring = new ArrayList<Object>();
      // Adding to caring list
      caring.add(PInummerArray);
      caring.add(MNummerArray);    
      caring.add(KundenIDArray);
      
      // Or if you prefer to save the arrays into Caring bean
      Caring _caring = new Caring(PInummerArray, MNummerArray, KundenIDArray);
      

      【讨论】:

        猜你喜欢
        • 2020-11-22
        • 2022-01-13
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 2015-07-07
        • 2019-08-24
        相关资源
        最近更新 更多