오늘 배운 컬렉션 프레임워크에서 해쉬맵과 파일을 읽어오는 방법을 모두 적용할 수 있는 예제이다.
8842height.phe.txt 파일을 읽어서 Patient오브젝트로 만들기
Patient.java
public class Patient {
private final int id;
private final String hid;
private final double height;
public Patient(int id, String hid, double height) {
this.id = id;
this.hid = hid;
this.height = height;
}
public int getId() {
return id;
}
public String getHid() {
return hid;
}
public double getHeight() {
return height;
}
}
readFile()
메서드가 실행되면 import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;
public class ReadPatientFile {
private final String fileName;
public ReadPatientFile(String fileName) {
this.fileName = fileName;
}
public HashMap<Integer, Patient> readFile() {
File file = new File(this.fileName);
String line = "";
HashMap<Integer, Patient> store = new HashMap<>();
try {
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, "\t");
try {
int id = Integer.parseInt(st.nextToken());
String hid = st.nextToken();
double height = Double.parseDouble(st.nextToken());
Patient patient = new Patient(id, hid, height);
store.put(patient.getId(), patient);
} catch (NumberFormatException e) {
System.out.println("error message: " + e.getMessage());
}
}
} catch (IOException e) {
e.printStackTrace();
}
return store;
}
}
위에서 만들었던 ReadPatientFile 인스턴스를 생성하고 메서드를 실행시켜 Patient 인스턴스들이 담긴 해쉬맵을 얻는다.
얻은 해쉬맵의 길이는 8842이고, 값들도 잘 들어가있다.
import java.util.HashMap;
import java.util.Set;
public class ReadPatientFileMain {
public static void main(String[] args) {
ReadPatientFile reader = new ReadPatientFile("8842height.phe.txt");
HashMap<Integer, Patient> store = reader.readFile();
System.out.println("store.size() = " + store.size());
Set<Integer> keys = store.keySet();
for (Integer key : keys) {
Patient patient = store.get(key);
System.out.printf("id = %d hid=%s height=%.1f \n",patient.getId(), patient.getHid(), patient.getHeight());
}
}
}
error message: For input string: "id"
store.size() = 8842
id = 1 hid=KNIHGR001511 height=150.0
id = 2 hid=KNIHGR007239 height=152.5
id = 3 hid=KNIHGR006959 height=157.0
id = 4 hid=KNIHGR001805 height=158.0
id = 5 hid=KNIHGR007805 height=149.0
id = 6 hid=KNIHGR003426 height=154.0
id = 7 hid=KNIHGR008635 height=154.0
---생략---