繁体   English   中英

将CSV文件读取为不同类型的数组,然后读取为Arraylist

[英]reading a CSV file into different types of arrays and then into an Arraylist

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

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;

错误状态:

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

护理是由以下代码创建的类

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;
}
}

我已经将这个错误输入到Google,我相信我可能会明白为什么我会收到此错误。 问题是尽管我在网上进行了大量研究,但我不知道如何获得理想的结果。

简而言之,我希望我的Arraylist包含数组(MNummer,PInummer,KundenID)。 我需要将其作为要编写的代码的数组列表,以便通过Java将批处理插入数据库中。

您试图将ArrayList<caring> betreuen作为标准数组访问。

ArrayList<Type>是类的单个实例(对象),但是,此类存储数据数组。

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

要添加到ArrayList<caring> betruen,您需要使用要add()的参数调用方法add() ,在这种情况下为betruen.add(MNummer);

但是,由于MNummer是String对象而不是caring对象,因此此方法不起作用,因此您必须首先创建caring类型的对象以添加到betruen。

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

请注意,对象类通常应以大写字母开头,变量通常应以小写字母开头,因此您可以例如编写如下代码: Caring caring = new Caring()而不是caring _caring = new caring()caring caring = new caring() ,后者将无法运行,因为JVM会因为变量名与类名相同而感到困惑。

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

以下面的代码为例,我们在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逗号分隔值(CSV)文件的通用格式和MIME类型,以获取有关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);
    }
} 

您读取csv行并为变量分配值,但您既未创建caring实例,也未将其添加到arraylist 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

简而言之,我希望我的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM