4

firstName(string)、lastName(string)、age(int)、gender(char)、および(int)の5つのフィールドを持つ単純な.csvファイルがありますpriority。このファイルを、すでに設定したリンクリストに読み込む必要があります。

私の質問はこれです:これについて行く最も簡単な方法は何でしょうか?一般的な(しかし単純な)アイデアを探しているだけなので、詳細は投稿していません。自分で理解したいのですが。FileReader/FileWriterよりもファイルI/Oの方がはるかに高度なことはしていません。これを達成するために私が考えることができる唯一の方法はScanner、各行をインポートし、次にString.split()すべてを配列に分割し、次に配列を調べて手動ですべてをプル/適切な形式に変換することです(すべてが文字列)、リンクリストに一度にすべて挿入します。ただし、これは非常に回りくどい方法のようです。

これを達成するためのより簡単な方法はありますか?

4

3 に答える 3

5

車輪を再発明することなく、より効果的な解決策があり ます

そして、ライブラリのドキュメントでは、それを使用する方法が非常によく説明されています

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(YourOrderBean.class);
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
strat.setColumnMapping(columns);

CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, yourReader);

これがお役に立てば幸いです。

于 2012-11-10T08:18:17.807 に答える
2

残念ながら、あなたはすでに最も簡単な解決策を見つけています。

一般に、Java では静的に型付けされているため、一般的なデータの読み取りは非常に不快です。CSV、XML、およびその他のデータ シリアライゼーション メソッドの要点の 1 つは、定義されているデータの構造に関して自己文書化することです。Java の場合、これはあまりうまく機能しません。なぜなら、構造を (クラスを介して) 事前定義するか、構造に読み込む必要があるため、ほとんど役に立たない一般的な構造 (リストまたはキー -> 値マップのように、すべてが保持される) です。文字列)。

これは Java の悪口ではなく、この特定の作業を簡単かつ直感的にすることは、Java のコア言語機能と根本的に互換性がないことを指摘しているだけです。Python のような動的に型付けされた言語では、そのようなことははるかに単純です (特に Python では、コア csv モジュールが存在するため、ほとんど自明です)。これは、あらゆる種類のデータをオブジェクトにドロップでき、適合するように適応するためです。 . Java は、これから何が起こるかを前もって知る必要があります。

于 2012-11-09T20:21:36.357 に答える
1

Spring Framework の StringUtils には、そのための機能がいくつかあります。しかし、それは実際には何の違いもなく、不必要な依存関係を導入していると思います.

あなたの考えに固執してください。

于 2012-11-09T20:24:01.553 に答える