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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

623閲覧

Javaでmainメソッドからreadメソッドを呼び出してArrayにcsvの内容を入れて返したい

Blue-sea

総合スコア15

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/03/01 06:05

前提・実現したいこと

JavaでBufferedReaderを使ってcsvファイルを呼び出し、
それをArrayList(二次元配列)に格納したものを返したreadメソッドを作成したい。

発生している問題・エラーメッセージ

エラーメッセージ fileReader(String, List<String[]>) は引数 (String) に適用できません 型の不一致: List<String[]> から String[] には変換できません

該当のソースコード

Java

1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileReader; 4import java.io.IOException; 5import java.util.ArrayList; 6import java.util.List; 7 8 9public class Main { 10 public static void main(String[] args) throws Exception { 11 List<String[]> list = new ArrayList<>(); 12 read("studentData.txt"); 13} 14 15public static String[] read(String filename, List<String[]> list) { 16 try { 17 File csv = new File(filename); 18 BufferedReader br = new BufferedReader(new FileReader(csv)); 19 String line; 20 21 while ((line = br.readLine()) != null) { 22 list.add(line.split(", ", 0)); 23 } 24 } catch (Exception e) { 25 System.out.println(e); 26 } finally { 27 return list; 28 } 29}

studentData

1//実際はもう少しありますが見やすくするため少なくした 2//番号、名前、性別、国、数、社、理、英 31, Aiba, 男, 50, 40, 30, 20, 10 42, Inoue, 女, 90, 80, 70, 60, 50 53, Ueda, 男, 10, 20, 30, 40, 50 6

試したこと

前に質問したのを進めたのですが、
それからずっとここで苦戦してます・・・。
どうしたらいいのでしょうか?

また、

補足情報(FW/ツールのバージョンなど)

Java8
Eclipse IDE 4.10.0

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

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

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

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

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

guest

回答2

0

fileReader(String, List<String[]>) は引数 (String) に適用できません

mainメソッド内で

Java

1read("studentData.txt");

とString型1つを渡して呼び出してますが、
実際のreadメソッドは

Java

1String[] read(String filename, List<String[]> list)

と書いてあるように、String型とList<String[]>型の2つを引数として取ります。

要するに引数の数があってないということです。

型の不一致: List<String[]> から String[] には変換できません

readメソッドの定義を見ると

Java

1String[] read(String filename, List<String[]> list)

String[]型を返すように定義されています。
しかし、実際にreturnを見ると

Java

1return list;

変数listを返していて、この変数は引数でList<String[]>と定義されています。
つまり、String[]が返されるはずなのにList<String[]>が来てておかしいぞということです。

投稿2019/03/01 06:13

dice142

総合スコア5158

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

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

Blue-sea

2019/03/04 02:19

回答ありがとうございます。 public static xxxx のxxxxのところはList<String>とやればいいのですね。 できないかと思い込んでいました。
guest

0

ベストアンサー

> fileReader(String, List<String[]>) は引数 (String) に適用できません

read()メソッドの呼び出しを

java

1read("studentData.txt", list);

とするか、read()メソッドの定義を

java

1public static String[] read(String filename) { 2 //returnは今は省略 3}

としなければいけません。他でも回答が出ていますが引数の数が一致しません。

> Arrayにcsvの内容を入れて返したい
> 型の不一致: List<String[]> から String[] には変換できません

という事からArrayList<String[]>で返したいものと推測しますので以下の様な書き方になります。

java

1public static ArrayList<String[]> read(String filename, ArrayList<String[]> list) { 2 return list; 3}

String[]で返すならreturnにはString[]型の変数、List<String[]>ならreturnにList<String[]>が必要です。

java

1public static xxxx read() { 2 xxxx modorichi; 3 4 return modorichi; 5}

また、List<String[]> list = new ArrayList<>();のArrayList<この中>()が推測できないので
エラーとなります。String[]を入れましょう。

以下は、finally内でなくfinally外に書き必ず実行するように書いた方が良いでしょう。

java

1finally { 2 return list; 3}

また、BufferedReaderは使い終えたら閉じる必要があります。

java

1BufferedReader br = new BufferedReader(new FileReader(csv)); 2br.close(); //閉じる

さらに、テキストの3行目のUeda, 男の間のスペースは2つ入っています。

※色々あって訳が分からないかもしれませんので作ってみました。
ある程度は元のソースをもとにしています。あしからず。

java

1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileReader; 4import java.util.ArrayList; 5 6public class Main { 7 private static ArrayList<String[]> list = new ArrayList<String[]>(); 8 9 public static void main(String[] args) throws Exception{ 10 list = read("C:/TestFolder/studentData.csv"); 11 /***ここまででlistに目的の物が入っていると思いますのでご自由に使って下さい***/ 12 listout(); 13 } 14 15 public static ArrayList<String[]> read(String filename) { 16 File csv = new File(filename); 17 String line; 18 19 try { 20 BufferedReader br = new BufferedReader(new FileReader(csv)); 21 while ((line = br.readLine()) != null) { 22 list.add(line.split(", ", 0)); 23 } 24 br.close(); 25 } catch (Exception e) { 26 System.out.println(e); 27 } 28 return list; 29 } 30 31 //ArrayList<String[]>の読み込み。以下のメソッドは確認用なので気にしないで。 32 public static void listout() { 33 String[] onegyo; 34 String ws = ""; 35 36 for (int a = 0; a < list.size(); a++) { 37 onegyo = list.get(a); 38 for (int i = 0; i< onegyo.length; i++) { 39 if (i == 0) { 40 ws = onegyo[i]; 41 } 42 else { 43 ws = ws + ", " + onegyo[i] ; 44 } 45 } 46 System.out.println(ws); 47 ws = ""; 48 } 49 //System.out.println(System.getProperty("file.encoding")); 50 } 51} 52

※確認用にコンソールで表示する時日本語の文字化けを起こすか分からなのでSystem.getProperty("file.encoding");で確認しcsvファイルの保存形式に注意してください。たぶん、EclipseのデフォルトならUTF-8だと思います。

投稿2019/03/03 12:14

shinami

総合スコア334

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

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

Blue-sea

2019/03/04 02:17

丁寧な回答をありがとうございます! しかし、無事にエラーが出なくなったのですが、 listoutメソッドでprint実行結果、 男、女のところが文字化けします(男→・j : 女→・・になる) 保存形式を見るとUTF-8なのですが・・・。 どうしたらいいのでしょうか?教えていただけると嬉しいです
shinami

2019/03/04 05:29

> System.out.println(System.getProperty("file.encoding")); で確認するとUTF-8とコンソールに表示されるという事でしょうか? テキストファイルそのものの保存形式がUTF-8で保存しているかです。 メモ帳だと名前を付けて保存する時「文字コード」ANSIとかでていませんか? そこをUTF-8にして保存します。
Blue-sea

2019/03/04 06:23

メモ帳の文字コードを確認したところANSIでしたので UTF-8に直したら無事に表示されました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問