【问题标题】:How can I read from a CSV file into 2 ArrayLists depending on the data type I have got in the File?如何根据文件中的数据类型从 CSV 文件中读取 2 个 ArrayList?
【发布时间】:2019-04-01 16:47:01
【问题描述】:

我是 java 的初学者,我不知道如何从 CSV 文件读取到 2 个 ArrayLists,可能使用令牌和。类型。 (列表->数组) 根据我们添加到一个或另一个列表中的令牌。

更新:文件的格式是固定的。这是格式:

Andrew,Nick,11,Pen,Apple,Backpack,5500.0,570.0,4700.0

例如:

名称、描述、55.0、100.0

将名称转换为字符串的 ArrayList。

55.0变成一个Double的ArrayList;

这是我的代码,我首先要弄清楚基本的。

public class CSVRead {
    public static void main(String[] arg) throws Exception {

          BufferedReader CSVFile = new BufferedReader(new FileReader("Auto2.csv"));

          String data= CSVFile.readLine(); 

          while (data != null){
           String[] dataArray = data.split(",");
           for (String item:dataArray) { 
              System.out.print(item + "\t"); 
           }
           System.out.println(); 
           data = CSVFile.readLine(); 
          }

          CSVFile.close();


          System.out.println();

         } 
        }

【问题讨论】:

  • 文件的格式是固定的吗?第 1 列始终是名称,第 3 列是一些双值?如果不能,数据的格式是否可以逐行更改?
  • 您好,是的,文件的格式是固定的。格式如下:Andrew Nick 11 Pen Apple Backpack 5500.0 570.0 4700.0
  • 可以用逗号分隔的实际格式发布数据的格式吗?
  • 您可以使用同样支持 CSV 的 Apache POI。他们的文档非常好,而且非常简单。

标签: java arrays arraylist split token


【解决方案1】:

你可以试试下面的代码。作为示例,我将索引零作为名称字段,将索引六作为您需要的双精度值。根据格式,您可以获得实际的字段索引并将其添加到您的列表中。

public void loadData() throws IOException {
    List<String> namesList = new ArrayList<>();
    List<Double> someDoubleList = new ArrayList<>();

    BufferedReader CSVFile = new BufferedReader(new FileReader("/Users/leon/Desktop/Auto2.csv"));
    String data = CSVFile.readLine();

    while (data != null) {
        String[] dataArray = data.split(",");
        // Add the names to string list as the index of it is zero
        namesList.add(dataArray[0]);

        // Add the double value to double list as the index of it is six.
        someDoubleList.add(Double.parseDouble(dataArray[6]));
        data = CSVFile.readLine();
    }

    CSVFile.close();
}

【讨论】:

  • 谢谢。所以我必须手动添加它们,比如 Pen.etc 的 add(dataArray[3])。我不能像方法一样使用 .Type() 并使用 if if statement(object instanceof x) 或其他东西来做?
  • 是的。根据数据行的字段,您可以获得索引并将其添加到您的列表中。例如,如果第一个字段是名称,则获取索引零并将其添加到名称列表中。如果第七个字段是某个双精度值,则将其添加到索引 6。
  • 您无法检查数据类型,因为一切都将只是字符串。由于格式是固定的,最好从索引中获取。
  • 确保您没有使用任何其他数组列表。使用 import java.util.ArrayList;
  • 非常感谢 Leon 所做的一切。最后一个问题。 for(int i=0;i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多