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

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

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

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

Q&A

解決済

1回答

1069閲覧

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

Seeker

総合スコア33

Java

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

0グッド

0クリップ

投稿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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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 クラスにはパラメータの無いコンストラクタを作成してください。
guest

回答1

0

ベストアンサー

Caused by: java.lang.NoSuchMethodException: CornaSarchMain.Product.<init>()

というのは、 "パラメータの無いコンストラクタ" が無いということです。

orangesignal のリポジトリのバージョンは 2.2.1 のようですので、 1.3.1 で動作するか分かりません。
Main.java

java

1import java.io.File; 2import java.io.IOException; 3import java.util.List; 4 5import com.orangesignal.csv.manager.CsvEntityManager; 6 7public class Main { 8 public static void main(String[] args) { 9 try { 10 List<Product> list = new CsvEntityManager().load(Product.class).from(new File("data.csv")); 11 for(Product product : list) System.out.println(product); 12 } catch(IOException e) { 13 e.printStackTrace(); 14 } 15 } 16}

Product.java

java

1import com.orangesignal.csv.annotation.CsvColumn; 2import com.orangesignal.csv.annotation.CsvEntity; 3 4@CsvEntity 5public class Product { 6 @CsvColumn(name = "都道府県名") 7 private String prefature; 8 @CsvColumn(name = "人口") 9 private int population; 10 @CsvColumn(name = "高齢者率") 11 private double oldPercent; 12 @CsvColumn(name = "地方") 13 private String domestic; 14 15 @Override 16 public String toString() { 17 return new StringBuilder("Product") 18 .append(" [prefature=").append(prefature) 19 .append(", population=").append(population) 20 .append(", oldPercent=").append(oldPercent) 21 .append(", domestic=").append(domestic) 22 .append("]").toString(); 23 } 24}

data.csv (utf-8)

csv

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

実行結果

plain

1Product [prefature=北海道, population=5228885, oldPercent=0.29, domestic=北海道] 2Product [prefature=青森県, population=1238730, oldPercent=0.3, domestic=東北] 3Product [prefature=岩手県, population=1211206, oldPercent=0.3, domestic=東北] 4Product [prefature=宮城県, population=2303487, oldPercent=0.25, domestic=東北] 5Product [prefature=秋田県, population=960113, oldPercent=0.34, domestic=東北] 6Product [prefature=山形県, population=1068696, oldPercent=0.31, domestic=東北] 7Product [prefature=福島県, population=1834198, oldPercent=0.28, domestic=関東] 8Product [prefature=茨城県, population=2868554, oldPercent=0.27, domestic=関東]

投稿2022/05/25 04:02

編集2022/05/25 04:07
jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Seeker

2022/05/26 13:41

色々いたらず、迷惑をかけてしまいました。 最新のをどうやって入れるかで実験には時間がかかりました。 回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問