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(カンマ区切り)ファイルを読み込んで、クラスのインスタンスを生成する場合、以下のように行う。
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を作成する。読み込んだデータを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; }
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);