2011-08-09 18 views
2

私は周りを見回しましたが、私が必要とするものはまったく見つからないようです。私はJavaのDataTableのようなものが必要です

私は列ヘッダなどでCSVファイルを読み込む必要がある

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

または

:私はそのようにようにそれを参照することができる場所

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

をどのオブジェクト私は読みにそれを解析することができます

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

C#では、これはDataTable/DataRowのようなもので行うことができます。

答えて

4

Think OOP。プロパティname,ageおよびheightを持つPersonクラスを作成する必要があります。

public class Person { 

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

    // Getter and setter methods... 
} 

次に、BufferedReaderを使用してCSVファイルを1行ずつ読み込みます。各行に対して、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のクラスを参照し、実際のP​​ITAを使用してそれらを処理します。それをしないでください。

+0

それは私を完全に助けたhasmap部分でした。 –

0

いいえ...デフォルトテーブルモデルを使用できます。スイングテーブルをサポートするように作られていますが、もしあなたが助けてくれるかどうかわかりません。 http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/table/DefaultTableModel.html

+0

列名は一意ですが、行は異なります。 –

+0

うん、私はC#datatableを調べた後、私の答えを変更(編集)しました – Sap

+0

この回答が参考になりましたか? – Sap

0

Guava libraryには、必要なものになるTableインターフェイスがあります。

関連する問題