如何在多维String数组中存储csv文件

时间:2013-09-21 12:38:00

标签: java arrays csv multidimensional-array

我是java和csv文件的新手。 我想将csv文件存储在多维字符串数组中,但我不知道文件及其字段中的行数。

那么如何获得行数(例如行数)

String[][] myStringArray = new String [X][5];

需要X的值

另外我想写一个带头文件的csv文件

ID,Time,Name,Comment
14,Mon Apr 06 23:48:45 PDT 2009,scotthamilton,"App"

最好使用哪些库

由于

2 个答案:

答案 0 :(得分:0)

SupeCSV是一个选项:http://supercsv.sourceforge.net/examples_writing.html
CSVMapWriter可能是编写标题并将列映射到标题的解决方案:

    final String[] header = new String[] { "ID","Time", "Name", "Comment" };

CSVMapReader或CSVBeanReader可用于读取具有任意行数的CSV文件,然后返回一个Map,然后可将其转换为二维String数组。

注意:请注意,CSV分隔符有时会有所不同(Excel导出等),即使它被称为逗号分隔值,也可能导致解析问题。首选项设置如下:

   mapReader = new CsvMapReader(new FileReader(path), CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE); 

答案 1 :(得分:0)

我建议你将文件存储到自增长的ArrayList中,然后调用List#toArray方法将结果转换为多维数组。

,例如:

List<List<String>> list = new ArrayList<List<String>>();

List<String> item;
list.add(item = new ArrayList<String>());
item.add("foo1"); 
item.add("bar1");

list.add(item = new ArrayList<String>());
item.add("foo2"); 
item.add("bar2");

List<String> [] arr = list.toArray(new ArrayList<String>(list.size()));

int maxSize = -1;
for(int a=0;a<arr.length;a++)
    if(maxSize < arr[a].size())
        maxSize = arr[a].size();

String [][] arr2 = new String[arr.length][maxSize];
for(int a=0;a<arr.length;a++)
    arr2[a] = arr[a].toArray(new String[maxSize]);

System.out.println(arr2);