[JAVA] 자바 - 파일 내용 읽어서 일부분만 다른 파일로 저장하기 (문제)
by mini_min[JAVA]
자바 - 파일 내용 읽어서 일부분만 다른 파일로 저장하기 (문제)
🔒 문제
✨user.txt 파일을 읽어 다음 파일을 작성 하세요
1. user.txt 파일은 다음과 같이 저장되어 있습니다. 홍길동,100,100,100 ...
2. 모든 점수가 40점 이상이고 평균이 60점 이상인 경우 pass.txt 파일에 총점 내림차순으로 저장하세요
3. 불합격자는 fail.txt 파일에 이름 오름차순으로 저장하세요.
4. 파일 저장형식은 모두 다음과 같은 형식으로 저장하세요 홍길동,100,100,100 ...
선생님이 주신 문제에는 파일 내용 일부만 다른 파일로 저장할 뿐만 아니라, 정렬도 해야했다.
파일 일부분만 다른 파일로 저장한건 알았는데 정렬은 못하고 있었음....
정렬을 위해 List 객체를 만들어야했다!
1. ScoreVO
2. Score (List 객체 만들기)
3. 필요한 부분만 로드load 하는 코드 짜기
4. 일부분만 저장하는 코드 짜기
1. ScoreVO
class ScoreVO { private String name; private int kor; private int eng; private int mat; private int tot; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getKor() { return kor; } public void setKor(int kor) { this.kor = kor; } public int getEng() { return eng; } public void setEng(int eng) { this.eng = eng; } public int getMat() { return mat; } public void setMat(int mat) { this.mat = mat; } public int getTot() { tot= kor+eng+mat; return tot; } }
2. Score (List 객체 만들기)
class Score { private List<ScoreVO> listPass = new ArrayList<>(); private List<ScoreVO> listFail = new ArrayList<>(); private String pathname = "user.txt"; private String passFilename = "pass.txt"; private String failFilename = "fail.txt";
3. 필요한 부분만 로드load 하는 코드 짜기
public void loadFile() throws IOException { File f = new File(pathname); try (BufferedReader br = new BufferedReader(new FileReader(f))){ String s; while((s=br.readLine())!=null) { String[] ss = s.split(","); if(ss.length!=4) { continue; } ScoreVO vo = new ScoreVO(); vo.setName(ss[0]); vo.setKor(Integer.parseInt(ss[1])); vo.setEng(Integer.parseInt(ss[2])); vo.setMat(Integer.parseInt(ss[3])); if(vo.getKor()>=40 && vo.getEng() >=40 && vo.getMat() >= 40 && vo.getTot()/3 >= 60) { listPass.add(vo); } else { listFail.add(vo); } } } catch (FileNotFoundException e) { throw e; } catch (IOException e) { throw e; } catch (NumberFormatException e) { throw e; } catch (Exception e) { throw e; } }
💡 BufferedReader(new FileReader(f) 로 파일을 읽어내는데,
ScoreVO 객체를 만들어서 저장한다.
그리고 VO 객체에 저장한 값을 if 조건을 주고 list 에 각각 저장한다.
4. 일부분만 저장하는 코드 짜기
public void saveFile() { //합격생 저장 // 총점 내림차순 Comparator<ScoreVO> comp = new Comparator<ScoreVO>() { @Override public int compare(ScoreVO o1, ScoreVO o2) { return -(o1.getTot() - o2.getTot()); } }; Collections.sort(listPass, comp); // 합격생 저장 try (PrintStream ps = new PrintStream(passFilename)){ for(ScoreVO vo : listPass) { ps.print(vo.getName()+","); ps.print(vo.getKor()+","); ps.print(vo.getEng()+","); ps.println(vo.getMat()+","); } } catch (IOException e) { e.printStackTrace(); } // 불합격생 저장 // 이름 오름차순 Comparator<ScoreVO> comp2 = new Comparator<ScoreVO>() { @Override public int compare(ScoreVO o1, ScoreVO o2) { return o1.getName().compareTo(o2.getName()); } }; Collections.sort(listFail, comp2); // 불합격생 저장 // 소트 쓰려면 리스트가 어쩔 수 없이 필요하다! try (PrintStream pm = new PrintStream(failFilename)){ for(ScoreVO vo : listFail) { pm.print(vo.getName()+","); pm.print(vo.getKor()+","); pm.print(vo.getEng()+","); pm.println(vo.getMat()+","); } } catch (IOException e) { e.printStackTrace(); } } Score score = new Score(); try { score.loadFile(); score.saveFile(); System.out.println("저장완료!"); } catch (Exception e) { e.printStackTrace(); }
💡 https://backshren20.tistory.com/55
Comparator 객체를 사용해서 객체를 정렬할 수 있고, Collections.sort(listPass, comp); 로 정렬한다.
(comp 가 정렬 기준이 되는 것! 정렬할 것은 listPass)
[JAVA] 자바 - Comparator 으로 성적처리 프로그램 정렬!!
[JAVA] 자바 - Comparator 이용해서 성적처리 프로그램 정렬 자바를 얼추 배워놓고 지금까지 쭉~~응용하는 성적처리 프로그램! 예전에 짜뒀던 코드에 Comparator 를 이용해서 정렬을 해보겠다. 오름차순
backshren20.tistory.com
블로그의 정보
개발자 미니민의 개발로그
mini_min