경마게임 코드를 작성하다가 저장된 데이터를 불러오는 기능이 있어야만 한다는 걸 깨닫게 되었다.
매번 유저정보 말정보 새로 입력할 수 없어.. 너무 번거로워...
처음엔 sharedPreference에 대해 좀 알아봤는데 이건 안드로이드 스튜디오에서 사용하는 기능인 것 같아서 일단 패스.. 무엇보다 꽤 오래 서칭했는데도 내가 사용하기에 적절한 레퍼런스를 찾지 못했다.
그러고서 Mysql이니 JQuery니 하는 것들 속에서 헤매다가.. 개발자 언니가 던져준 "텍스트 파일에 CSV로 저장하고 읽어"에서 실마리를 찾게 되었다. 이건 그래도 검색해보니 뭔가 내가 쓸 수 있을 것 같았음
1. 활용한 코드 부분 (201003ver)
User u = new User();
MyHorse h = new MyHorse();
ManageGame mg = new ManageGame();
//Scanner sc = new Scanner(new File("C:\\lecture\\hgdata\\userdata.csv"));
String line = "";
String splitBy = ",";
String[] horseInfo = new String[3];
Double[] skill = new Double[4];
int[] status = new int[3];
int[] basicinfo = new int[3];
try {
BufferedReader br = new BufferedReader(new FileReader("userdata.csv"));
while((line = br.readLine())!= null) {
String[] userdata = line.split(splitBy);
//매핑해주기
System.out.println(userdata);
u.setUserInfo(userdata[0], userdata[1], userdata[2], userdata[3]);
//user info mapping name email gender dob
h.setHorseInfo(userdata[4], userdata[5], userdata[6]);
//horse info mapping name kind color
for(int i=0; i<4; i++) {
skill[i] = Double.parseDouble(userdata[i+7]);
}
h.setSkill(skill[0], skill[1], skill[2], skill[3]);
//horse skill mapping
for(int i=0; i<3; i++) {
status[i] = Integer.parseInt(userdata[i+11]);
}
h.setStatus(status[0], status[1], status[2]);
//horse status mapping
for(int i=0; i<3; i++) {
basicinfo[i] = Integer.parseInt(userdata[i+14]);
System.out.println(basicinfo[i]);
}
mg.setBasicInfo(basicinfo[0], basicinfo[1], basicinfo[2]);
//ManageGame day time gold mapping
}
}
catch (IOException e){
e.printStackTrace();
}
u.showUserInfo();
h.showMyHorseInfo();
mg.showDate();
맵핑할 땐 가독성을 좋게 하려고 일부러 포문을 여러차례 써서 userinfo, horseinfo, skill, status, basicinfo를 나누어 받았다. 이게 사람 입장에선 보기 좋은게 맞는데 성능면에서 좋은건진 모르겠다.
2. 파일 읽어오는 부분만 따로 정리
//Scanner sc = new Scanner(new File("C:\\lecture\\hgdata\\userdata.csv"));
.
.
try {
BufferedReader br = new BufferedReader(new FileReader("userdata.csv"));
while((line = br.readLine())!= null) {
.
.
스캐너로 읽어와서 쓰는 방법과 버퍼드리더로 읽어와서 쓰는 방법 두 가지가 있었다. 나는 실습 개념으로 Scanner를 이용해서 읽어왔고, 맵핑할 땐 버퍼드리더로 써봤다. 사실 try {} 쓴 것도 뭔지 모르는데 그냥 따라 씀. 한번 찾아봐야겠다.
Scanner를 사용해서 new File();하는 경우 경로를 넣어준 레퍼런스 페이지를 보고 따라했다가
그 뒤에 BufferedReader을 사용한 레퍼런스 페이지를 보고 따라하면서 파일경로에 파일명만 넣어줬더니 경로가 꼬여서 오류가 났다. 대충 아래와 같은 오류 ▼
java.io.FileNotFoundException: userdat.csv (지정된 파일을 찾을 수 없습니다)
--- USER INFO ---
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at BreedingNRace.test.main(test.java:46)
파일명만 넣는 경우의 경로는 프로젝트 경로여야 한다.
.project
.classpath 파일 있는 그 폴더
아니면 스캐너에서 썼던 것처럼 읽어올 파일이 있는 경로+파일명+확장자를 통째로 넣어줘야 하는 듯
3. referenced page (감사합니다)
opencsv.sourceforge.net/#where_can_i_get_it
'Languages > Java' 카테고리의 다른 글
[eclipse] 오픈 API를 사용할 때 setting.xml파일이 필요한 경우 (0) | 2020.12.18 |
---|---|
[JAVA] 미니 프로젝트를 하는 도중 느낀점, 궁금한 점 (0) | 2020.11.21 |
무한 중첩 폴더 삭제하기 (nested folder) / 날려먹은 JAVA소스코드 디컴파일해서 복구하기 (0) | 2020.09.30 |
Eclipse에서 JAVA Project import시 existing or corrupted 오류 날 때 프로젝트 디렉토리 재설정하는 방법 (0) | 2020.09.22 |
[국비지원교육] 04. Java 메소드 활용방법 정리 (0) | 2020.09.14 |