ファイルの読み込み

読み込みの基本

Files.readAllLines(Paths.get("ファイル名")) でファイルの内容を1行ずつStringのListで得ることが出来る。

ReadSampleクラス

try{
	List<String> lines = Files.readAllLines(Paths.get("shain.txt"));
	
	for(String line: lines){
		System.out.println(line);
	}

} catch (IOException e) {
	System.out.println("読み込みエラー:" + e.getMessage());
}

CSVファイルの読み込み

CSV(カンマ区切り)ファイルを読み込んで、クラスのインスタンスを生成する場合、以下のように行う。

ShainReadクラス

// ShainのList
List<Shain> list = new ArrayList<>();

try{
	List<String> lines = Files.readAllLines(Paths.get("shain.txt"));

	for(String line: lines){
		// カンマ区切り分割
		String[] data = line.split(",");

		// 各要素を変数に(int型は変換)
		String id = data[0];
		String name = data[1];
		String busho = data[2];
		int age = Integer.parseInt(data[3]);

		// インスタンス生成
		Shain s = new Shain(id, name, busho, age);

		// リストに追加
		list.add(s);
	}

} catch (IOException e) {
	System.out.println("読み込みエラー:" + e.getMessage());
}

ShainFileクラスの作成

ファイル読み込み用のクラス ShainFileを作成する。読み込んだデータをShainのArrayListに入れるようにする。ArrayListはフィールドとして宣言し、インスタンスを作成しておく。

	private List<Shain> list = new ArrayList<Shain>(); 
読み込みはコンストラクタで行う。Shainインスタンスを生成したらlistに追加していく。

// コンストラクタ
public ShainFile(String fileName) {
	// ファイルの読み込み
	try{
		List<String> lines = Files.readAllLines(Paths.get(fileName));
		
		for(String line: lines){
			String[] data = line.split(",");

			String id = data[0];
			String name = data[1];
			String busho = data[2];
			int age = Integer.parseInt(data[3]);
			
			Shain s = new Shain(id, name, busho, age);
			list.add(s);
		}
	} catch (IOException e) {
		System.out.println("読み込みエラー:" + e.getMessage());
	}
}

リストのゲッターを用意し、外部から取得できるようにする。

	public List<Shain> getList() {
		return list;
	}

ShainFileクラスの利用

ShainFileMainクラスのmainメソッドで、ShainFileクラスのインスタンスを生成し、getListでリストを取得する。
拡張for文で表示する。

ShainFile file = new ShainFile("shain.txt"); 
List<Shain> list = file.getList();

for(Shain s : list) {
	System.out.println(s);
}

単一の検索結果を返すメソッドの追加

ShainFileクラスにIDで検索するメソッド findByIdを追加する。存在しない場合にはnullを返す。

public Shain findById(String id) {
	for(Shain s : list) {
		if( s.getId().equals(id)) {
			return s;
		}
	}
	return null;
}

ShainFileMainクラスのmainメソッドで、findByIdを利用してみる。

	Shain s = file.findById("A002");
	
	System.out.println(s);

複数の検索結果を返すメソッドの追加

ShainFileクラスで部署で検索するメソッド findByBushoを追加する。このメソッドは複数のShainを返す可能性がある。そのため、Listを返すようにする。

public List<Shain> findByBusho(String busho) {
	List<Shain> result = new ArrayList<Shain>();
	
	for(Shain s : list) {
		if( s.getBusho().equals(busho)) {
			result.add(s);
		}
	}
	return result;
}

ShainFileMainクラスのmainメソッドで、findByBushoを利用してみる。

List<Shain> shainList = file.findByBusho("開発部");
System.out.println(shainList);

重複を排除した一覧の取得

ShainFileクラスで部署の一覧を得るメソッド getBushoList を追加する。このメソッドはBushoの一覧を返すため、listからbushoを取得し、重複を除いて返す。そのため、Setを利用する。最後にsetをArrayListにして返す。

public List<String> getBushoList() {
	Set<String> set = new LinkedHashSet<>();
	
	for(Shain s : list) {
		set.add(s.getBusho());
	}
	return new ArrayList<String>(set);
}	

ShainFileMainクラスのmainメソッドで、getBushoListを利用してみる。

List<String> bushoList = file.getBushoList();
System.out.println(bushoList);