2011-08-09 38 views
2

我环顾四周,但似乎无法找到任何非常符合我需要的东西。我需要类似Java中的DataTable

我需要带列标题的CSV文件读取,例如:

NAME;AGE;HEIGHT 
dan;36;180 
john;31;181 
ben;30;190 

什么目的我可以解析成读取在那里我可以再引用它,像这样:

object.name = (string) someSortOfDataStructure["NAME"]; 
object.name = (int) someSortOfDataStructure["AGE"]; 

object.name = someSortOfDataStructure.getColumn("NAME"); 

在C#中,我可以用DataTable/DataRow之类的东西做到这一点。

回答

4

认为OOP。您需要创建一个Person类属性nameageheight

public class Person { 

    private String name; 
    private String age; 
    private String height; 

    // Getter and setter methods... 
} 

接下来,使用BufferedReader逐行读取CSV文件。对于每行你想分割线使用line.split(";");给你一个String[]包含令牌。

对于行,你现在可以创建一个从令牌的Person;

Person person = new Person(); 
person.setName(tokens[0]); 
person.setAge(tokens[1]); 
person.setHeight(tokens[2]); 

注意,这假设列位置。如果你想删除这个假设,你需要将Map头部放到某个位置。

String headerLine = "NAME;AGE;HEIGHT"; 
String[] headers = headerLine.split(";"); 
Map<String,Integer> map = new HashMap<String,Integer>(); 
for (int i=0; i<headers.length; i++) { 
    map.put(headers[i], i); 
} 

然后,您可以通过它的名称获取列的位置;

Person person = new Person(); 
person.setName(tokens[map.get("NAME")]); 
person.setAge(tokens[map.get("AGE")]); 
person.setHeight(tokens[map.get("HEIGHT")]); 

Table类型类是反模式。当程序员不能用对象来思考时,他们往往会出现。我经常在遗留的java应用程序中看到Table类,并且它真正的PITA可以与它们一起工作。不要这样做。

+0

感谢这是hasmap完美帮助我的hasmap部分。 –