前提・実現したいこと
参考資料に記載されているコードを元に
Javaのオブジェクト指向で書かれたプログラムで
csvファイルを読み込み形式はそのままで新たなcsvファイルを
書き出そうとしています。
コピーではなく、
そのままの形式で一度オブジェクトのメンバとした
上で新たなcsvファイルに出力しようとしています。
参考資料
入力はexcelで作成したものをcsvファイルにした
item.csv
発生している問題・エラーメッセージ
String型におけるエラーが発生しています。
以下のエラーをなくすにはどのようにコードを修正すべきでしょうか。
Exception in thread "main" java.lang.NumberFormatException: For input string: "りんご" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at csvTest.main(csvTest.java:39)
該当のソースコード
csvTestクラス
Java
1//Java.ioパッケージ 2import java.io.BufferedReader; 3import java.io.FileReader; 4import java.io.FileWriter; 5import java.io.IOException; 6import java.io.PrintWriter; 7import java.util.ArrayList; 8import java.util.List; 9import java.util.StringTokenizer; 10 11public class csvTest { 12 13 public static void main(String[] args, BufferedReader outputLine) { 14 List<Item> itemList = new ArrayList<Item>(); //データ格納用リスト 15 String input = "item.csv";//String型でファイル名を指定する 16 String output = "itemOut.csv"; 17 18 try { 19 BufferedReader InputLine = new BufferedReader(new FileReader(input)); 20 PrintWriter outputLine1 = new PrintWriter(new FileWriter(output)); 21 String line; 22 23 line = InputLine.readLine(); //ヘッダを読み込む 24 outputLine1.println(line); //ヘッダを書き込む 25 26 //1行ずつ読み込み 27 while ((line = InputLine.readLine()) != null) { //String変数lineに格納 28 StringTokenizer st = new StringTokenizer(line); //lineを分割の対象にする 29 30 Item item = new Item(); //Itemクラスのインスタンスを作成 31 //フィールドの設定を行う 32 //String型をInteger型に変更 33 /* 34 item.setName(Integer.parseInt(st.nextToken(","))); 35 item.setProductarea(Integer.parseInt(st.nextToken(","))); 36 */ item.setproducer_id(Integer.parseInt(st.nextToken(","))); 37 38 itemList.add(item); //リストに追加する 39 } 40 41 //itemListの中身を順に出力する 42 for (Item item : itemList) { 43 outputLine.print(item.getName() + ","); 44 outputLine.print(item.getProductarea() + ","); 45 outputLine.print(item.getProducer() + ","); 46 outputLine.println(); 47 } 48 //開いていた出入力ファイルを閉じる 49 InputLine.close(); 50 outputLine.close(); 51 52 } catch (IOException e) { 53 System.out.println("ファイルが開けません"); 54 } 55 } 56 57}
Itemクラス
java
1public class Item { 2 //フィールド 3 //メンバはprivate, メソッドはpublic 4 private String name; 5 private String area; 6 private String producer_id; 7 8 //メンバにはgetter, setterメソッドでアクセスする 9 public String getName() { 10 return name; 11 } 12 13 public void setName(String name) { 14 this.name = name; 15 } 16 17 public String getProductarea() { 18 return area; 19 } 20 21 public void setProductarea(String area) { 22 this.area = area; 23 } 24 25 public int getProducer() { 26 return producer; 27 } 28 29 public void setProducer(int producer_id) { 30 this.producer_id = producer_id; 31 } 32}
###試したこと
csvTestクラスを以下のようにコメントアウトしたところ、
/* item.setName(Integer.parseInt(st.nextToken(","))); item.setProductarea(Integer.parseInt(st.nextToken(","))); item.setproducer_id(Integer.parseInt(st.nextToken(","))); */
出力がすべてnullと0になりました。
itemOut.csv
補足情報(FW/ツールのバージョンなど)
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.3a Release (4.7.3a)
Microsoft Excel for Mac バージョン16.13
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/23 04:43
2018/05/23 04:47
退会済みユーザー
2018/05/23 04:52
退会済みユーザー
2018/05/23 04:59
2018/05/23 05:24