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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

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

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Eclipse

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

Q&A

解決済

1回答

2036閲覧

Javaのオブジェクト指向でコンストラクタを用いてcsvファイルを読み書きする方法

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Java

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

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Eclipse

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

0グッド

1クリップ

投稿2018/05/23 23:48

前提・実現したいこと

以下の参考資料に記載されているコードを元に
Javaのオブジェクト指向で書かれたプログラムで
csvファイルを読み込み形式を変更した上で新たなcsvファイルを
書き出そうとしています。
以下excelですが、csv形式にしたファイルを読み書きします。
イメージ説明

参考資料

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

参考資料ではsetterとgetterを用いてcsvファイルの読み書きをしていましたが、
コンストラクタを用いる場合はどのようにコードを書けばいいのかわからず
困っています。
以下、コンストラクタを用いてインスタンスを生成したコードですが、
ここからどのようにしてcsvファイルからデータを読み書きすればいいのかわかりません。

package test; class StudentCard{ int number; int length; int width; int hight; int displacement; //StudentCardクラスに追加したコンストラクタ StudentCard(int number, int length,int width, int hight, int displacement){ System.out.println("Carクラスのコンストラクタが呼びだされました"); this.number = number; this.length = length; this.width = width; this.hight = hight; this.displacement = displacement; } } public class ConstructorExample { public static void main(String[] args) { //StudentCardクラスのインスタンスを生成 Car a = new Car(1122, 5000, 2500, 1700, 2000); //ここにcsvファイルから読んだものを入力して複数のインスタンスを作成したい System.out.println("aのnumberの値は" + a.number); //printlnで出力ではなく。csvファイルに出力したい } }

該当のソースコード

以下、参考資料と同様のコードでsetterとgetterを使って
csvからデータを読み込み、オブジェクトのインスタンスを作成し、csvファイルに出力しています。

Carクラス

Java

1 2public class Car { 3 //フィールド 4 //メンバはprivate, メソッドはpublic 5 private int number; 6 private int length; 7 private int width; 8 private int hight; 9 private int displacement; 10 11 //メンバにはgetter, setterメソッドでアクセスする 12 public int getNumber() { 13 return number; 14 } 15 public void setNumber(int number) { 16 this.number = number; 17 } 18 public int getLength() { 19 return length; 20 } 21 public void setLength(int length) { 22 this.length = length; 23 } 24 public int getWidth() { 25 return width; 26 } 27 public void setWidth(int width) { 28 this.width = width; 29 } 30 public int getHight() { 31 return hight; 32 } 33 public void setHight(int hight) { 34 this.hight = hight; 35 } 36 public int getDisplacemet() { 37 return displacement; 38 } 39 public void setDisplacement(int displacement) { 40 this .displacement = displacement; 41 } 42 43} 44

Testクラス

Java

1//Java.ioパッケージ 2import java.io.BufferedReader; 3import java.io.FileReader; 4import java.io.FileWriter; 5import java.io.IOException; 6import java.io.PrintWriter; 7//Java.utilパッケージ 8import java.util.ArrayList; 9import java.util.List; 10import java.util.StringTokenizer; 11 12public class Test { 13 public static void main(String[] args) { 14 List<Car> carList = new ArrayList<Car>(); //データ格納用リスト 15 String input = "carSample.csv";//String型でファイル名を指定する 16 String output = "carSampleout.csv"; 17 18 try { 19 BufferedReader InputLine = new BufferedReader(new FileReader(input)); 20 PrintWriter outputLine = new PrintWriter(new FileWriter(output)); 21 String line; 22 23 line = InputLine.readLine(); //ヘッダを読み込む 24 outputLine.println(line); //ヘッダを書き込む 25 26 //1行ずつ読み込み 27 while((line = InputLine.readLine()) != null) { //String変数lineに格納 28 StringTokenizer st = new StringTokenizer(line); //lineを分割の対象にする 29 30 Car car = new Car(); //Carクラスのインスタンスを作成 31 //フィールドの設定を行う 32 //String型をInteger型に変更 33 car.setNumber(Integer.parseInt(st.nextToken(","))); 34 car.setLength(Integer.parseInt(st.nextToken(","))); 35 car.setWidth(Integer.parseInt(st.nextToken(","))); 36 car.setHight(Integer.parseInt(st.nextToken(","))); 37 car.setDisplacement(Integer.parseInt(st.nextToken(","))); 38 39 carList.add(car); //リストに追加する 40 } 41 42 //carListの中身を順に出力する 43 for(Car car : carList) { 44 outputLine.print(car.getNumber() + ","); 45 outputLine.print(car.getLength() + ","); 46 outputLine.print(car.getWidth() + ","); 47 outputLine.print(car.getHight() + ","); 48 outputLine.print(car.getDisplacemet()); 49 outputLine.println(); 50 } 51 //開いていた出入力ファイルを閉じる 52 InputLine.close(); 53 outputLine.close(); 54 }catch(IOException e) { 55 System.out.println("ファイルが開けません"); 56 } 57 58} 59 60} 61

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

Eclipse Java EE IDE for Web Developers.
Version: Oxygen.3a Release (4.7.3a)

Microsoft Excel for Mac バージョン16.13

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイル読み書きに関してはコンストラクタを使っても変わりありません。

Java

1 2public class Test 3{ 4 public static void main(String[] args) { 5 List<Car> carList = new ArrayList<Car>(); //データ格納用リスト 6 String input = "carSample.csv";//String型でファイル名を指定する 7 String output = "carSampleout.csv"; 8 9 try { 10 BufferedReader InputLine = new BufferedReader(new FileReader(input)); 11 PrintWriter outputLine = new PrintWriter(new FileWriter(output)); 12 String line; 13 14 line = InputLine.readLine(); //ヘッダを読み込む 15 outputLine.println(line); //ヘッダを書き込む 16 17 //1行ずつ読み込み 18 while((line = InputLine.readLine()) != null) { //String変数lineに格納 19 StringTokenizer st = new StringTokenizer(line); //lineを分割の対象にする 20 21 //String型をInteger型に変更 22 int number = Integer.parseInt(st.nextToken(",")); 23 int length = Integer.parseInt(st.nextToken(",")); 24 int width = Integer.parseInt(st.nextToken(",")); 25 int hight = Integer.parseInt(st.nextToken(",")); 26 int displacement = Integer.parseInt(st.nextToken(",")); 27 28 carList.add(new Car(number, length, width, hight, displacement)); //リストに追加する 29 } 30 31 //carListの中身を順に出力する 32 for(Car car : carList) { 33 outputLine.print(car.number + ","); 34 outputLine.print(car.length + ","); 35 outputLine.print(car.width + ","); 36 outputLine.print(car.hight + ","); 37 outputLine.print(car.displacement); 38 outputLine.println(); 39 } 40 //開いていた出入力ファイルを閉じる 41 InputLine.close(); 42 outputLine.close(); 43 }catch(IOException e) { 44 System.out.println("ファイルが開けません"); 45 } 46 } 47} 48 49class Car{ 50 int number; 51 int length; 52 int width; 53 int hight; 54 int displacement; 55 56 //Carクラスに追加したコンストラクタ 57 Car(int number, int length,int width, int hight, int displacement){ 58 System.out.println("Carクラスのコンストラクタが呼びだされました"); 59 this.number = number; 60 this.length = length; 61 this.width = width; 62 this.hight = hight; 63 this.displacement = displacement; 64 } 65} 66

少しいじってみました。

Java

1 2public class Test 3{ 4 static final String input = "carSample.csv"; 5 static final String output = "carSampleout.csv"; 6 7 public static void main(String[] args) { 8 // 自動closeのtry-with-resources 9 try (BufferedReader InputLine = new BufferedReader(new FileReader(input)); 10 PrintWriter outputLine = new PrintWriter(new FileWriter(output));){ 11 12 List<Car> carList = new ArrayList<Car>(); 13 String line; 14 15 line = InputLine.readLine(); 16 outputLine.println(line); 17 18 while((line = InputLine.readLine()) != null) { 19 // カンマで分割してintに変換 20 int[] elements = Arrays.stream(line.split(",")).mapToInt(Integer::parseInt).toArray(); 21 22 // Carのコンストラクタを呼び出してインスタンス生成し、それをリストに格納 23 carList.add(new Car(elements[0], elements[1], elements[2], elements[3], elements[4])); 24 } 25 26 for(Car car : carList) { 27 // println内でcar.toString()が呼ばれることになっている 28 outputLine.println(car); 29 } 30 }catch(IOException e) { 31 System.out.println("ファイルが開けません"); 32 } 33 } 34} 35 36class Car{ 37 public final int number; 38 public final int length; 39 public final int width; 40 public final int hight; 41 public final int displacement; 42 43 public Car(int number, int length,int width, int hight, int displacement){ 44 System.out.println("Carクラスのコンストラクタが呼びだされました"); 45 this.number = number; 46 this.length = length; 47 this.width = width; 48 this.hight = hight; 49 this.displacement = displacement; 50 } 51 52 // 出力用にフィールドをカンマ区切りの文字列にするメソッド 53 @Override 54 public String toString() { 55 StringBuilder sb = new StringBuilder(); 56 sb.append(number).append(",").append(length).append(",").append(width).append(",").append(hight).append(",").append(displacement); 57 return sb.toString(); 58 } 59} 60

投稿2018/05/24 00:39

YamakawaJunichi

総合スコア630

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

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

退会済みユーザー

退会済みユーザー

2018/05/24 01:04

ご回答いただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問