如何保存从csv导入的动态2D数组?

时间:2014-08-13 05:38:19

标签: java arrays csv dynamic import

我正在制作将CSV文件导入String 2D数组的代码。

由于我打算将此代码应用于其他具有不同列数和行数的CSV文件,我应该使用动态数组。

但我不知道处理导入和输入一次保存在动态2D阵列中。 你能帮我找一下我的代码有什么问题吗?它没有用。

代码:

import java.io.*;
import java.util.*;

public class DataImport_1 {

   private ArrayList<ArrayList<String>> arr = null; 

   public static void main(String[] args) throws FileNotFoundException {
      Scanner scanner = new Scanner(new File("C:/Dropbox (CMA)/1 Research (5)/TA/new Data/SPX Index.csv"));
      scanner.useDelimiter(",");

      arr = new ArrayList<ArrayList<String>>(); 

      child1 = new ArrayList<String>();

      while(scanner.hasNext()){
         child1.add(scanner.next());
      }
      arr.add(child1);
      child1.clear();
      scanner.close();
   }
}

2 个答案:

答案 0 :(得分:0)

使用Scanner.nextLine()并用逗号分隔每一行或读取while循环内的整行(已经拆分为列)。现在你不做任何事!

第一种方法的例子:

  Scanner scanner = new Scanner(new File("C:/Dropbox (CMA)/1 Research (5)/TA/new Data/SPX Index.csv"));
  arr = new ArrayList<ArrayList<String>>(); 
  while(scanner.hasNext()){
     String line = scanner.nextLine();
     String[] columns = line.split(",");
     Collections.addAll(arr, columns); 
  }
  scanner.close();

答案 1 :(得分:0)

如果要将arr结构化为数组列表的数组列表,则需要创建多个child1

当你“清除”child1时,它会清除它引用的对象,这是你刚存放在arr中的对象,最终你会有一堆arr条目所有引用最近清除的child1

对于每一行,而不是

child1.clear();

DO

child1 = new ArrayList();