読者です 読者をやめる 読者になる 読者になる

Lesaria の Multiple-Choice

とりあえず、日記がメインのはず。最近では、小説を公開したり、聴いた音楽や考えてることについて話してます。

鴨とreadCSV@Java ~CSVを二次元ArrayListに格納~

 土曜日は朝チクチクとコードを書いてから、大学時代の友人の家に会いにゆき、マックで食事。そこから彼の家で歓談。缶ビールを飲んで帰宅。帰り駅まで送ってもらいました。その時池で見た鴨の親子の写真。鴨の雛って親の下に潜り込む習性があるのかと驚き何枚か撮影。

f:id:multiplechoice:20140706091831j:plain

f:id:multiplechoice:20140706091842j:plain

 帰宅してまたチクチク、コーディング。まずは初心者向けのサンプルコードを参考にファイルをArrayListに格納するメソッドを書き。次にCSVファイルを二次元ArrayListに格納するメソッドに挑戦。僕のプランとしては、ファイルから改行毎に、ArrayListに格納する処理は出来ているので、ArrayListを入子にします。

ArrayList<ArrayList<String>> alList = new ArrayList<ArrayList<String>>();

これで二次元ArrayListが出来上がります。そしてこれにファイルから一行読み込んだレコード(例: 001,リンゴ,21個,赤)を格納しながらループさせるつもりでした。例示したようなStringをArrayListに変更するに当たって、カンマを探して分割するような処理を書いて公開するつもりでしたが、JAVAには便利な命令がありました。

String List[] = Str.split(",",-1);

「この一行で事足りるのか」と思ったらこれ、配列には値入るけど、思考錯誤してもループなしでArrayListに入れる方法が分からず、結局以下のようなコードになりました。趣味でコーディングしているだけなので、善し悪しの点では色々あると思います。参考にできるところは参考にしてよろしくなさそうなところは参考にしないでください。たとえば、変数の命名方法などはいろいろ決まった様式があり、各々可読性が考慮されています。僕はテキトーかましてます。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class fileSystem{
	public ArrayList<ArrayList> readCSV(String sFile){
		ArrayList<ArrayList> oResult = new ArrayList<ArrayList>();
		try{
			FileReader fr = new FileReader(sFile);
			BufferedReader br = new BufferedReader(fr);
			String sLine ="";
			while (sLine != null){
				sLine = br.readLine();
				if(sLine != null){
					String temp[] = sLine.split(",",-1);
					ArrayList al = new ArrayList();
					int i = 0;
					int il = temp.length;
					while( i< il ){
						al.add(temp[i]);
						i++;
					}
					oResult.add(al);
				}
			}
			br.close();
			fr.close();
		}catch(IOException e){
			System.out.println(e);

		}
		return oResult;
	}
}

※ 下記の入門編は読みました。そこからイキナリ実務でしたが、いろいろ予備知識があり、Eclipseが入力を助けてくれることもあり、それほど困りませんでした。実際に上のコードを理解するにはいろいろググる必要があるかもです。

 

スッキリわかるJava入門

スッキリわかるJava入門