switch文によってList<>の<>に入れる部分を変えて
(同時に読み込むファイルも設定)
BufferedReaderを使ってList<?>に入れたい
おそらく、public static void FRead(String filename, List<この中をクラス型としたいが特定のクラスだけではなく複数のクラスに対応
> list)
それと同時にこの複数のクラスは.csvファイルにより決定する。
なので、List<>という書き方をし<この中
>を書かなかった。なのでエラーが出てしまいます。
という事でOKでしょうか?
私もJavaは浅いので分かりませんがたぶん、できないと思います。
switch文で分けその先でそれぞれ固定のList<Arts>などとするしかありません。
固定の引数であるならできます。
引数渡しではありませんが例えばのサンプルを書いときます。
元のコードを基準に書いています。あしからず。
java
1 import java . io . BufferedReader ;
2 import java . io . File ;
3 import java . io . FileReader ;
4 //import java.io.IOException;
5 import java . util . ArrayList ;
6 import java . util . List ;
7
8 public class readmain {
9 private static List < Arts > list = new ArrayList < Arts > ( ) ;
10 private static List < Tabemono > tlist = new ArrayList < Tabemono > ( ) ;
11 private static Arts arts ;
12 private static Tabemono tabe ;
13
14 public static void main ( String [ ] args ) throws Exception {
15 int select = 1 ; //今回はこれが目的ではないのでファイル選択はここで直接変更する事とする。
16 String csv = "" ;
17 System . out . println ( "0 … 文系 (国語、社会、英語)" ) ;
18 System . out . println ( "1 … 食物系 (食べ物名)" ) ;
19
20 switch ( select ) { //CSVファイルの設定
21 case 0 :
22 csv = "C:/TestFolder/studentArts.csv" ;
23 FRead ( csv , select ) ;
24 listout ( select ) ;
25 //List<Arts> Subject = new ArrayList<Arts>();
26 break ;
27 //(・・・caseを増やす予定・・・)
28 case 1 :
29 csv = "C:/TestFolder/tabemono.csv" ;
30 FRead ( csv , select ) ;
31 listout ( select ) ;
32 break ;
33 default :
34 System . out . println ( "ファイルが存在しない番号を選びました。" ) ;
35 break ;
36 }
37 //int size = Subject.size();//エラー・list を解決できません
38 //listにcsvのデータを入れ、読み込んだ行の数をカウントする
39
40 }
41
42 private static void FRead ( String filename , int sele ) {
43 File csv = new File ( filename ) ;
44 String line ;
45
46 try {
47 BufferedReader br = new BufferedReader ( new FileReader ( csv ) ) ;
48 while ( ( line = br . readLine ( ) ) != null ) {
49 String [ ] onegyo = line . split ( ", " ) ; //一旦配列に入れる。もっと良い方法があれば良いが。
50 switch ( sele ) {
51 case 0 :
52 if ( onegyo [ 0 ] . startsWith ( "\uFEFF" ) ) {
53 arts = new Arts ( Integer . valueOf ( onegyo [ 0 ] . substring ( 1 , onegyo [ 0 ] . length ( ) ) ) , onegyo [ 1 ] , onegyo [ 2 ] , Integer . valueOf ( onegyo [ 3 ] ) , Integer . valueOf ( onegyo [ 4 ] ) , Integer . valueOf ( onegyo [ 5 ] ) ) ;
54 } else {
55 //arts = new Arts();新しい実体を作成。それぞれの実体にデータを入れる。
56 //1つの実体を使いまわしその中にsetterを使い入れてもすべて最終のデータとなる
57 arts = new Arts ( Integer . valueOf ( onegyo [ 0 ] ) , onegyo [ 1 ] , onegyo [ 2 ] , Integer . valueOf ( onegyo [ 3 ] ) , Integer . valueOf ( onegyo [ 4 ] ) , Integer . valueOf ( onegyo [ 5 ] ) ) ;
58 //↑1行の代わりに以下の7行を使っても同じ。
59 //arts = new Arts();
60 //arts.setNo(Integer.parseInt(onegyo[0]));
61 //arts.setName(onegyo[1]);
62 //arts.setGender(onegyo[2]);
63 //arts.setKokugo(Integer.parseInt(onegyo[3]));
64 //arts.setShakai(Integer.parseInt(onegyo[4]));
65 //arts.setEigo(Integer.parseInt(onegyo[5]));
66 }
67 list . add ( arts ) ;
68 break ;
69 case 1 :
70 //Windowsのメモ帳などでUTF-8で保存した場合1行目の先頭にはBOMと言う物が付いている
71 if ( onegyo [ 0 ] . startsWith ( "\uFEFF" ) ) {
72 //付いている場合は除いた2文字目から取る
73 tabe = new Tabemono ( Integer . parseInt ( onegyo [ 0 ] . substring ( 1 , onegyo [ 0 ] . length ( ) ) ) , onegyo [ 1 ] ) ;
74 } else {
75 //付いていない場合はそのまま取る
76 tabe = new Tabemono ( Integer . parseInt ( onegyo [ 0 ] ) , onegyo [ 1 ] ) ; //Integer.valueOf(onegyo[0])
77 }
78
79 tlist . add ( tabe ) ;
80 break ;
81 }
82 }
83 br . close ( ) ;
84
85 } catch ( Exception e ) {
86 System . out . println ( e ) ;
87 }
88 }
89
90 private static void listout ( int sele ) {
91 Arts wcls ;
92 Tabemono twcls ;
93 String ws = "" ;
94
95 switch ( sele ) {
96 case 0 :
97 for ( int a = 0 ; a < list . size ( ) ; a ++ ) {
98 wcls = list . get ( a ) ;
99 ws = String . valueOf ( wcls . getNo ( ) ) + ", " + wcls . getName ( ) + ", " + wcls . getGender ( ) + ", " ;
100 ws += String . valueOf ( wcls . getKokugo ( ) ) + ", " + String . valueOf ( wcls . getShakai ( ) ) + ", " + String . valueOf ( wcls . getEigo ( ) ) ;
101 System . out . println ( ws ) ;
102 }
103 break ;
104 case 1 :
105 for ( int a = 0 ; a < tlist . size ( ) ; a ++ ) {
106 twcls = tlist . get ( a ) ;
107 ws = String . valueOf ( twcls . getTno ( ) ) + ", " + twcls . getNamae ( ) ;
108 System . out . println ( ws ) ;
109 }
110 break ;
111 }
112
113 //System.out.println(System.getProperty("file.encoding"));
114 }
115 }
java
1 2
3 public class Arts extends Student {
4 private int kokugo ; //国語
5 private int shakai ; //社会
6 private int eigo ; //英語
7
8 //コンストラクタ(引数なし:フィールドの初期化のみ)
9 public Arts ( ) {
10 super . setStAll ( 0 , "" , "" ) ;
11 this . setScAll ( 0 , 0 , 0 ) ;
12 }
13
14 //コンストラクタ(実体の作成と同時に引数でフィールドにセット)
15 public Arts ( int no , String name , String gender , int kokugo , int shakai , int eigo ) {
16 this . no = no ;
17 this . name = name ;
18 this . gender = gender ;
19 this . kokugo = kokugo ;
20 this . shakai = shakai ;
21 this . eigo = eigo ;
22 }
23
24 //コンストラクタ(引数あり:フィールドの手動更新)
25 //このコンストラクタは何をやりたかったのか不明なので保留
26 public Arts ( int n ) {
27 super . setNo ( n ) ;
28 //this.setNamePoint(); //フィールドに宣言されてもおらず不明
29 }
30
31 public int getKokugo ( ) {
32 return this . kokugo ;
33 }
34
35 public void setKokugo ( int kokugo ) {
36 this . kokugo = kokugo ;
37 }
38
39 public int getShakai ( ) {
40 return this . shakai ;
41 }
42
43 public void setShakai ( int shakai ) {
44 this . shakai = shakai ;
45 }
46
47 public int getEigo ( ) {
48 return this . eigo ;
49 }
50
51 public void setEigo ( int eigo ) {
52 this . eigo = eigo ;
53 }
54
55 public void setScAll ( int kokugo , int shakai , int eigo ) {
56 this . kokugo = kokugo ;
57 this . shakai = shakai ;
58 this . eigo = eigo ;
59 }
60
61 }
java
1 2
3 public class Student {
4 protected int no ; //Studentクラスと継承先のクラスで使えるようにprotectedで宣言
5 protected String name ;
6 protected String gender ;
7
8 //コンストラクタ(初期化)
9 public Student ( ) {
10 this . setStAll ( 0 , "" , "" ) ;
11 }
12
13 //コンストラクタ(同時にフィールドに代入。)
14 public Student ( int no , String name , String gender ) {
15 this . no = no ;
16 this . name = name ;
17 this . gender = gender ;
18 }
19
20 public int getNo ( ) {
21 return this . no ;
22 }
23
24 public void setNo ( int no ) {
25 this . no = no ;
26 }
27 public String getName ( ) {
28 return this . name ;
29 }
30
31 public void setName ( String name ) {
32 this . name = name ;
33 }
34
35 public String getGender ( ) {
36 return this . gender ;
37 }
38
39 public void setGender ( String gender ) {
40 this . gender = gender ;
41 }
42
43 public void setStAll ( int no , String name , String gender ) {
44 this . no = no ;
45 this . name = name ;
46 this . gender = gender ;
47 }
48 }
49
以下追加
Tabemono.java
java
1
2 public class Tabemono {
3 private int _tno ;
4 private String _namae ;
5
6 public Tabemono ( ) {
7 this . _tno = 0 ;
8 this . _namae = "" ;
9 }
10
11 public Tabemono ( int tno , String namae ) {
12 this . _tno = tno ;
13 this . _namae = namae ;
14 }
15
16 public int getTno ( ) {
17 return this . _tno ;
18 }
19
20 public void setTno ( int value ) {
21 this . _tno = value ;
22 }
23
24 public String getNamae ( ) {
25 return this . _namae ;
26 }
27
28 public void setNamae ( String value ) {
29 this . _namae = value ;
30 }
31 }
追加csv(Tabemono.csv)
csv
1 1, りんご
2 2, さしみ
3 3, ステーキ
ちなみに、int[] Art;
はArtという単なる配列であり、Artsクラスとは何の関係もない事になります。
int[] abc;と同じです。