質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

解決済

orangesignal-csv-1.3.1で、POJO形式のクラスのファイルを読み込む方法

Seeker
Seeker

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1回答

0評価

0クリップ

218閲覧

投稿2022/05/24 06:25

使用環境
window 10Home
eclipse: 2022-03 
orangesignal-csv-1.3.1

CSVを扱う練習のためにダウンロードしてファイルを読みこみ、
POJO形式でデータを取り入れようとしましたが、なぜか、クラス自体が形成されませんでした。
どうしたクラスが生成されて読み込んでくれるのでしょうか

やったこと
・Product の部分のPrivate→Public
・Productの部分の項目をリストにしてみた(例 Prefature String→ Prefature String[])

・Main

package CornaSarchMain;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import jp.sf.orangesignal.csv.Csv;
import jp.sf.orangesignal.csv.CsvConfig;
import jp.sf.orangesignal.csv.filters.BeanExpressions;
import jp.sf.orangesignal.csv.handlers.BeanListHandler;
import jp.sf.orangesignal.csv.handlers.ColumnPositionMappingBeanListHandler;
import jp.sf.orangesignal.csv.handlers.CsvEntityListHandler;

public class Main {

public static void main(String[] args) { String Cluster="Domestic"; String ClusterSubname="東北"; String Date="CoronaDate"; try { List<Product> Set= Csv.load(new File("Prefature Set.csv"),"windows-31j", new CsvConfig(),new ColumnPositionMappingBeanListHandler<Product>(Product.class)); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }

・ProductCLass

package CornaSarchMain;

public class Product {
private String Prefature;
private int Population;
private double OldPercent;
private String Domestic;
public Product(String prefature, int population, double oldPercent, String domestic) {
Prefature = prefature;
Population = population;
OldPercent = oldPercent;
Domestic = domestic;
}
public String getPrefature() {
return Prefature;
}
public int getPopulation() {
return Population;
}
public double getOldPercent() {
return OldPercent;
}
public String getDomestic() {
return Domestic;
}
public void setPrefature(String prefature) {
Prefature = prefature;
}
public void setPopulation(int population) {
Population = population;
}
public void setOldPercent(double oldPercent) {
OldPercent = oldPercent;
}
public void setDomestic(String domestic) {
Domestic = domestic;
}
}

・Prefature Set.csv

都道府県名 人口 高齢者率 地方
北海道 5228885 0.29 北海道
青森県 1238730 0.3 東北
岩手県 1211206 0.3 東北
宮城県 2303487 0.25 東北
秋田県 960113 0.34 東北
山形県 1068696 0.31 東北
福島県 1834198 0.28 関東
茨城県 2868554 0.27 関東



(以下略)

・エラーメッセージ
java.io.IOException: Cannot create CornaSarchMain.Product: CornaSarchMain.Product
at jp.sf.orangesignal.csv.handlers.BeanListHandlerSupport.createBean(BeanListHandlerSupport.java:273)
at jp.sf.orangesignal.csv.handlers.ColumnPositionMappingBeanListHandler.load(ColumnPositionMappingBeanListHandler.java:205)
at jp.sf.orangesignal.csv.handlers.AbstractCsvListHandler.load(AbstractCsvListHandler.java:75)
at jp.sf.orangesignal.csv.handlers.AbstractCsvListHandler.load(AbstractCsvListHandler.java:32)
at jp.sf.orangesignal.csv.Csv.load(Csv.java:69)
at jp.sf.orangesignal.csv.Csv.load(Csv.java:83)
at jp.sf.orangesignal.csv.Csv.load(Csv.java:98)
at jp.sf.orangesignal.csv.Csv.load(Csv.java:129)
at CornaSarchMain.Main.main(Main.java:22)
Caused by: java.lang.InstantiationException: CornaSarchMain.Product
at java.base/java.lang.Class.newInstance(Class.java:671)
at jp.sf.orangesignal.csv.handlers.BeanListHandlerSupport.createBean(BeanListHandlerSupport.java:269)
... 8 more
Caused by: java.lang.NoSuchMethodException: CornaSarchMain.Product.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3617)
at java.base/java.lang.Class.newInstance(Class.java:658)
... 9 more

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2022/05/24 09:44

コードやテキストファイル、コンソールに出力されたもの等はコードのマークダウンで其々毎に囲ってご提示ください。
jimbe

2022/05/24 09:50

お使いのパッケージに渡すクラスの構造は、ご提示のクラスの構造で合っているのでしょうか。 ログにはデフォルトコンストラクタが無いと言われているようですが。
Seeker

2022/05/24 17:13

マークダウンの件はすいませんでした。 訂正 new ColumnPositionMappingBeanListHandler →new ColumnNameMappingBeanListHandler で 取り扱い説明書を見たところ public class ColumnNameMappingBeanListHandler<T> http://orangesignal.github.io/orangesignal-csv/apidocs/com/orangesignal/csv/handlers/ColumnNameMappingBeanListHandler.html?adlt=strict&toWww=1&redig=4AA49B55D5964402AE55641B05AC0A5F と表記されていまして、ジェネリック型と思われますが・・・ どう使えばいいのかよくわかりません。
jimbe

2022/05/24 17:39 編集

ご質問は編集できます。 もしやこのパッケージを使ったのは初めてということでしょうか。 読もうとしているファイルも CSV では無いようですし。
Seeker

2022/05/24 17:52

はい、初めてです。 csvの所はすいません…… 表記では空白となっていますが 実態はちゃんとカンマが付いてます。
jimbe

2022/05/24 18:03 編集

CSV になっているのですね、失礼しました。 初めてでしたら、 [クイックスタート](http://orangesignal.github.io/orangesignal-csv/quick_start.html) のお勧めの方法 (POJO にアノテーションを付けて Entity 系? で load) でやったほうが良いのではないでしょうか。 そして、POJO クラスにはパラメータの無いコンストラクタを作成してください。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。